C++11/C++0x 14
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2011/09/23(金) 15:56:01.00http://www.open-std.org/jtc1/sc22/wg21/
Wikipedia
http://ja.wikipedia.org/wiki/C%2B%2B0x
前スレ: C++0x 13
http://hibari.2ch.net/test/read.cgi/tech/1311240361/
0002デフォルトの名無しさん
2011/09/23(金) 15:56:22.09http://pc11.2ch.net/test/read.cgi/tech/1149440647/
C++0x 2
http://pc11.2ch.net/test/read.cgi/tech/1191842951/
C++0x 3
http://pc11.2ch.net/test/read.cgi/tech/1204808027/
C++0x 4
http://pc11.2ch.net/test/read.cgi/tech/1214407525/
C++0x 5
http://pc12.2ch.net/test/read.cgi/tech/1232460649/
C++0x 6
http://pc12.2ch.net/test/read.cgi/tech/1245092251/
C++0x 7
http://pc12.2ch.net/test/read.cgi/tech/1253280377/
C++0x 8
http://pc12.2ch.net/test/read.cgi/tech/1262874195/
C++0x 9
http://pc12.2ch.net/test/read.cgi/tech/1269623636/
C++0x 10
http://hibari.2ch.net/test/read.cgi/tech/1275375522/
C++0x 11
http://hibari.2ch.net/test/read.cgi/tech/1285884294/
C++0x 12
http://hibari.2ch.net/test/read.cgi/tech/1298470844/
親戚スレ
C1x
http://hibari.2ch.net/test/read.cgi/tech/1296642667/
0003デフォルトの名無しさん
2011/09/23(金) 16:00:14.160004デフォルトの名無しさん
2011/09/23(金) 16:07:16.73/´ ̄`ヽ /: : : \_____/: : : : ヽ、
,. -‐┴─‐- <^ヽ、: : : : : : : : : : : : : : : : : : : : : : }
/: : : : : : : : : : : : : :`.ヽl____: : : : : : : : : : : : : : : : : : /
,. -──「`: : : : : : : : : :ヽ: : : : : : : : :\ `ヽ ̄ ̄ ̄ フ: : : : :/
/: :.,.-ァ: : : |: : : : : : : : : :\: : : : :: : : :ヽ \ /: : : :/
 ̄ ̄/: : : : ヽ: : : . . . . . . . . . . .、 \=--: : : :.i / /: : : : :/
/: : ∧: \: : : : : : : : : : ヽ: :\: : : 〃}/ /: : : : :/ 、
. /: : / . : : :! ヽ: : l\_\/: : : : :\: ヽ彡: : | /: : : : :/ |\
/: : ィ: : : : :.i: : | \!___/ ヽ:: : : : : : :\|:.:.:.:/:! ,': : : : / |: : \
/ / !: : : : :.ト‐|- ヽ \: : : : : l::::__:' :/ i: : : : :{ |: : : :.ヽ
l/ |: : :!: : .l: :| \: : : l´r. Y {: : : : :丶_______.ノ: : : : : :}
l: : :l: : :ト、| 、___,ィ ヽ: :| ゝ ノ '.: : : : : : : : : : : : : : : : : : : : : : /
|: : :ト、: |: :ヽ ___,彡 ´ ̄´ ヽl-‐' \: : : : : : : : : : : : : : : : : : イ
!: :从ヽ!ヽ.ハ=≠' , ///// ///u /  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
V ヽ| }/// r‐'⌒ヽ イ〉、
ヽ、______ー‐‐' ィ´ /:/:7rt‐---、 こ、これは>>1乙じゃなくて
ィ幵ノ ./:/:./:.! !: : : : :!`ヽ ポニーテールなんだから
r‐'T¨「 |: | !:.∨:/:./: :| |: : : : .l: : : :\ 変な勘違いしないでよね!
/: : .|: :| !:.!ィ¨¨ヾ、:.:/ !: : : : l: : : : : :.\
0005デフォルトの名無しさん
2011/09/23(金) 18:28:04.74ふぁー
0006デフォルトの名無しさん
2011/09/23(金) 19:03:42.810007デフォルトの名無しさん
2011/09/23(金) 22:09:32.72, '´ / r‐ 、`丶、_
/ i ! \ ノへ` ミ く ̄_`_ヽ___
/ | , '´  ̄`丶>‐ヘ / |
{ | / / /V1 〈 l
ヽ、 )′ / // / / ' `l l `、 ハ
ノ // /ィ 〃_'_|_/ / l | } V |
/ {Ti l | i´/ レ l`{ '_〉V | ト、ノ
'´ `いl | {y7汽くヽ! // `ン リ_ / ! |
{ /(ヘ、lハ{i::.::リ r芯Y /r `ヽ/ヽ
、 〃 `o、 `,,'′ , 〈::.:;ノシ^Zァ-r } |
丶、 {i ,ヘ、 /^ヽ `゛/ ,二/ | ′
( ー‐' _彡 _/_丶、 ‐' . ィ/ r) l /
` ̄{ ハ ( /::.::.:: ;ニヽ、´{ l rく´ |/
ヽ、`ー 厶イ :/ ∨ 〉ヽ」_」__::\ハ >>1乙にゃん
/): : / /ヘ: /::.::.::.::.::|::.::.:/
!': : 八丶、, ' : : `ヽ、:_:_:_:jLノ
0008デフォルトの名無しさん
2011/09/24(土) 00:45:52.770009デフォルトの名無しさん
2011/09/24(土) 09:32:22.39忘れろてか絶対書くな
0010デフォルトの名無しさん
2011/09/24(土) 15:48:28.56スクリプトで似たようなオーバーロードたくさん生成する作業はもういやだお
0011デフォルトの名無しさん
2011/09/24(土) 15:52:32.87main.cpp:9:40: 残念ですが未実装です: cannot expand ‘ns ...’ into a fixed-length argument list
0012デフォルトの名無しさん
2011/09/24(土) 18:17:04.09結構楽々だぜ?
0013デフォルトの名無しさん
2011/09/24(土) 19:12:45.83ttp://www.kijineko.co.jp/lab/20100425-1
0014デフォルトの名無しさん
2011/09/24(土) 21:57:20.350015デフォルトの名無しさん
2011/09/24(土) 22:12:38.60decltypeって関数の戻り値の型も取り出せるのか
オラワクだな
0016デフォルトの名無しさん
2011/09/24(土) 23:39:04.024.3から実装されてる。コード晒して。
0017デフォルトの名無しさん
2011/09/24(土) 23:58:13.72なぜ便利なのですか?
0018デフォルトの名無しさん
2011/09/25(日) 00:16:31.39#include <iostream>
template <int n, int... ns>
struct sum {
static const int value = n + sum<ns...>::value;
};
template <int n>
struct sum<n> {
static const int value = n;
};
int main()
{
std::cout << sum<1, 2, 3>::value << std::endl;
}
もしかして、こういう風には使えないのか?
0019デフォルトの名無しさん
2011/09/25(日) 00:23:10.03ヘルプを見なくても戻り値をなんとか受け取れます
0020デフォルトの名無しさん
2011/09/25(日) 00:53:53.500021デフォルトの名無しさん
2011/09/25(日) 01:19:09.37禿: マスター (いらっしゃいませ、ただいまメニューはこちらになっております
コンパウンドリテラルさん: いつも2人分の席にいらっしゃる貫禄
ホステス auto : 双子の妹? 姉妹仲が修復不能状態
ホスト concept: フェラーリでご出勤の稼ぎ頭・・・のはずだったが、入院または服役の噂。ゆっくり充電してね。
ホステス auto_ptr: 同伴が伸び悩み、若い子の面接でしょっぱい思いをしている低級管理職。
右辺値参照さん: 裏家業、別れさせ屋。カウンターではおとなしい。
ラッパー: その名のとおり一気のみして現在昏睡状態、禿の一言に深く傷ついた模様。
マルチスレッド先生: 新機軸だった持論が実は70年代とわかりストレス処理中。まわりが潤ういい荒れ方。
0022デフォルトの名無しさん
2011/09/25(日) 02:06:18.36constexpr int sumfunc(int v)
{
return v;
}
template<class... Args>
constexpr int sumfunc(int v, Args... args)
{
return v + sumfunc(args...);
}
template <int n, int... ns>
struct sum { static const int value = sumfunc(n, ns...); };
int main()
{
std::cout << sum<1, 2, 3>::value << std::endl;
int x[sum<4, 5>::value] = { 1 };
for(auto v: x) { std::cout << v << ", "; }
std::cout << std::endl;
}
0023デフォルトの名無しさん
2011/09/25(日) 02:23:14.260024デフォルトの名無しさん
2011/09/25(日) 02:30:42.28そこら辺仕様なんだろうか?
0025デフォルトの名無しさん
2011/09/25(日) 02:53:32.95すげえ
gcc4.6.1(MinGW)でコンパイルして走ってしまった
しかしEclipse CDTが対応してないらしくまだエラーだらけの画面
実行結果
6
1, 0, 0, 0, 0, 0, 0, 0, 0,
0026デフォルトの名無しさん
2011/09/25(日) 02:58:21.10sum::value要らない
0027デフォルトの名無しさん
2011/09/25(日) 05:07:21.550028デフォルトの名無しさん
2011/09/25(日) 17:30:02.0510と同じだったら嫌だ
0029デフォルトの名無しさん
2011/09/25(日) 18:36:25.24今のところgccではテンプレート引数パックを固定長テンプレート引数リストに渡すのは実装されてない。
// gcc-4.6.1ではコンパイルエラー(未実装の機能)
template<int n>
struct Hoge {};
template<int... n>
struct Fuga { Hoge<n...> hoge; };
template<class T>
struct Toge {};
template<class... T>
struct Tuga { Toge<T...> toge; };
int main()
{
Fuga<1> fuga; //エラー
Tuga<int> tuga; //エラー
}
>>24
>>22で使ってるのは関数呼び出しからのテンプレート実引数推論であって上記とは別の機能。
0030デフォルトの名無しさん
2011/09/25(日) 18:45:15.09ほぼ同じ
0031デフォルトの名無しさん
2011/09/25(日) 19:27:46.680032デフォルトの名無しさん
2011/09/25(日) 19:29:40.11じゃなかった。。。
禿と共に去りぬ。ナンマイダ―w
0033デフォルトの名無しさん
2011/09/25(日) 20:27:36.530034デフォルトの名無しさん
2011/09/26(月) 04:51:23.180035デフォルトの名無しさん
2011/09/26(月) 07:56:38.850036デフォルトの名無しさん
2011/09/26(月) 10:49:20.01開発者がIndiana版conceptの中の人だから。
0037デフォルトの名無しさん
2011/09/26(月) 11:06:51.140038デフォルトの名無しさん
2011/09/26(月) 11:29:44.60VS gcc 両方で使える機能だけ
0039デフォルトの名無しさん
2011/09/26(月) 11:51:34.97基本的にマージされる方向。cfe-devにもよく登場する人。
http://www.google-melange.com/gsoc/proposal/review/google/gsoc2011/gigabytes/1
0040デフォルトの名無しさん
2011/09/26(月) 23:15:17.44不自由を強いられるようなもんだからこうなるのも当然ではあるけど
0041デフォルトの名無しさん
2011/09/27(火) 21:58:53.13Javaよりよっぽどオブジェクト指向言語らしく見える。
//オブジェクトによる分岐
( a == b )
( [](){ puts("Is True"); } )
( [](){ puts("Is False"); } );
//オブジェクトによる反復
for_each( seq( 0, 9 ) )
( [](int i){ printf("0-9 count: %d", i); } );
//メンドイんで省略して反復
for_seq( 0, 9 )
( [](int i){ printf("0-9 count: %d", i); } );
0042デフォルトの名無しさん
2011/09/27(火) 23:59:50.010043デフォルトの名無しさん
2011/09/28(水) 00:24:32.10//オブジェクトによる分岐
auto boolean = a == b;
boolean
( [](){ puts("Is True"); } )
( [](){ puts("Is False"); } );
//オブジェクトによる反復
for_each loop( seq( 0, 9 ) );
loop
( [](int i){ printf("0-9 count: %d", i); } );
0044デフォルトの名無しさん
2011/09/28(水) 00:31:34.220045デフォルトの名無しさん
2011/09/28(水) 00:39:33.45今の所ステータスNoになってるな
0046デフォルトの名無しさん
2011/09/28(水) 00:40:01.900047デフォルトの名無しさん
2011/09/28(水) 10:13:35.95いまどきlambdaくらい他言語の人の方が理解あるだろ
0048デフォルトの名無しさん
2011/09/28(水) 10:30:59.56こんなに仕様が大きくなったら追いつかないわ・・・
0049デフォルトの名無しさん
2011/09/28(水) 11:49:42.160050デフォルトの名無しさん
2011/09/28(水) 12:54:24.75的外れかもしれないが強いて挙げるならスレッドが仕様に含まれたのが大きいか
0051デフォルトの名無しさん
2011/09/28(水) 16:33:36.87確かに
関数オブジェクトをわざわざ別のクラスで定義しなければいけなかった
今までが異常だったとも言える
0052デフォルトの名無しさん
2011/09/28(水) 16:42:30.700053デフォルトの名無しさん
2011/09/28(水) 17:58:07.08どこまで最適化してくれるもんなのやら
0054デフォルトの名無しさん
2011/09/28(水) 19:39:36.520055デフォルトの名無しさん
2011/09/28(水) 21:16:41.50コードサイズがひどいことになる
0056デフォルトの名無しさん
2011/09/28(水) 21:27:14.020057デフォルトの名無しさん
2011/09/28(水) 21:27:20.750058デフォルトの名無しさん
2011/09/28(水) 23:48:45.770059デフォルトの名無しさん
2011/09/29(木) 11:31:07.35拡張じゃないforと何か変わりますか?
0060デフォルトの名無しさん
2011/09/29(木) 13:04:46.650061デフォルトの名無しさん
2011/09/29(木) 13:50:32.86std::packaged_task
ってグローバル変数もパックしてくれるの?
スレッドの中でグローバル変数参照しててグローバル変数を別スレッドで変更したらどうなるの?
0062デフォルトの名無しさん
2011/09/29(木) 14:06:43.95mutexなりでガードするかatomic変数として宣言するかしないと、
data raceで未定義動作となる。
0063デフォルトの名無しさん
2011/09/29(木) 14:45:54.81関数の再帰呼び出しでスタック積んでいって
途中で別スレッドに処理が移ったら
スタックの情報も別スレッドに移動してくれるとか
そんな便利機能を期待してたのだけど
全部指定しないとダメってことなのかな
0064デフォルトの名無しさん
2011/09/29(木) 15:04:58.35領域としてのスタックを指してるならそんな動作は100%害悪にしかならない
便利機能とか思ってるなら今日はもう顔洗って寝ろ
0065デフォルトの名無しさん
2011/09/29(木) 15:45:26.54> 途中で別スレッドに処理が移ったら
スレッドが「処理」の主体なのに「移る」の?
0066デフォルトの名無しさん
2011/09/29(木) 15:48:42.44ひょっとそんな便利機能あるのかと期待してしまった
0067デフォルトの名無しさん
2011/09/29(木) 15:59:14.29http://en.wikipedia.org/wiki/Tail_call#Through_trampolining
0068デフォルトの名無しさん
2011/09/29(木) 16:02:40.55これとかです
0069デフォルトの名無しさん
2011/09/29(木) 16:04:09.26http://ja.wikipedia.org/wiki/%E7%B6%99%E7%B6%9A
0070デフォルトの名無しさん
2011/09/29(木) 19:36:46.350071デフォルトの名無しさん
2011/10/02(日) 16:42:23.32その前にスレッド間で広域変数なんて使うなよ。
グローバル変数が許されるのはI/O関係か割り込みかかメモリー関係ぐらい。
シグナルですらグローバル変数を回避できるのに。
0072デフォルトの名無しさん
2011/10/02(日) 17:05:52.54C#ではマルチスレッドでhogeに同時にアクセスしても、hogeの初期化は排他制御されるが
C++11で同様の事やる場合はどうなってるの?
0073デフォルトの名無しさん
2011/10/02(日) 17:38:03.07volatileとか知らない人?
0074デフォルトの名無しさん
2011/10/02(日) 18:11:57.660075デフォルトの名無しさん
2011/10/02(日) 18:46:46.57非同期 I/O も割り込みもスレッドなのをご存知ない?
そもそも「許される例」があるのに、そこまで感情的になるのは間違ってるって思わないのか
0076デフォルトの名無しさん
2011/10/02(日) 18:59:31.29一般的な話だと思うが
0077デフォルトの名無しさん
2011/10/02(日) 19:05:08.30解こうとする問題と構造の一致しないモデルをなぜ強要するんだ
0078デフォルトの名無しさん
2011/10/02(日) 19:14:46.59volatileになんの関係が?
>>75
構文上許されたからどうした。
スレッドには引数で渡すだろ。
0079デフォルトの名無しさん
2011/10/02(日) 19:18:06.85自分のわからない話からわかる話にしようとしてるだけだから無視するが宜しい。
0080デフォルトの名無しさん
2011/10/02(日) 19:21:56.160081デフォルトの名無しさん
2011/10/02(日) 19:29:42.870082デフォルトの名無しさん
2011/10/02(日) 19:33:59.03>volatile: a multithreaded programmer's worst enemy.
ttp://thread.gmane.org/gmane.comp.lib.boost.devel/221929/focus=222849
VCの制作スタッフも語ってる
0083デフォルトの名無しさん
2011/10/02(日) 19:44:02.960084デフォルトの名無しさん
2011/10/02(日) 19:52:21.000085デフォルトの名無しさん
2011/10/02(日) 20:01:05.16ましてやC++11のスレで発言できるネタじゃなくね。
0086デフォルトの名無しさん
2011/10/02(日) 20:08:26.810087デフォルトの名無しさん
2011/10/02(日) 20:38:56.850088デフォルトの名無しさん
2011/10/02(日) 20:50:29.420089デフォルトの名無しさん
2011/10/02(日) 20:54:30.900090デフォルトの名無しさん
2011/10/02(日) 21:25:25.89お前の中だけで完結してるならチラシの裏にでも書いとけ
0091デフォルトの名無しさん
2011/10/03(月) 00:11:36.92std::atomic、mutex、condition_variableで効率的に書きなおす移植用サンプルが欲しい
0092デフォルトの名無しさん
2011/10/03(月) 00:56:14.33↓はvolatile関係あるだろ
>>71
> シグナルですらグローバル変数を回避できるのに。
0093デフォルトの名無しさん
2011/10/03(月) 01:40:24.48a = true;
a = false;
こんな風に連続して代入された場合、
1番目の代入が消えなくなる。他にも無駄な式が消えなくなる。
それから、レジスタではなくメモリーに値を取るようになる。
それだけの機能しか無い。
スレッド環境じゃメモリーに値を取るのは、mutex呼べば強制的に
押さえ込まれるので関係ない。2重代入の消去にしてもグローバル変数や
引数で渡されたポインタに関してもmutexを読んだ場合は、
コンパイラが他の関数で参照する事を考え削除しないので影響はない。
よってvolatileの意味はない。
0094デフォルトの名無しさん
2011/10/03(月) 01:48:07.56((int*)0x10000) = 0x01;を連続で呼ばなきゃいけない場合とかに使う物
そもそもC++11以前のC++はスレッドの事を何にも知らん
0095デフォルトの名無しさん
2011/10/03(月) 01:53:35.99>mutexを呼んだ場合は、コンパイラが他の関数で参照する事を考え削除しない
これってstd::mutexに限った話です?
それともpthreadやWin32その他のAPIでもそうなるの?
0096デフォルトの名無しさん
2011/10/03(月) 02:01:28.56インライン展開しない関数全般の話
関数を呼んだ時点で、呼び出し元の変数はスタックに退避される。
0097デフォルトの名無しさん
2011/10/03(月) 02:12:45.42関数の呼び出しを跨いでるものを
削除したらマズイ訳で
int global;
int Callee()
{
return ++global;
}
void Caller()
{
int n;
global = 10;
n = Callee();
global = 15;
}
int main(){Caller();return 0;}
0098デフォルトの名無しさん
2011/10/03(月) 02:29:47.410099デフォルトの名無しさん
2011/10/03(月) 02:36:17.870100デフォルトの名無しさん
2011/10/03(月) 02:39:20.53理解できたかも。なるほどです
スタティック領域/スタック領域/ヒープ領域などには関係なく、非インライン展開の関数をまたぐ場合、
コンパイラはメモリアクセス順を変えたり削除したりせずに常にメモリ書き込みコードを入れるってことかな
ただし書き込みと言ってもCPUキャッシュまでライトバックされるとは限らないから、スレッド間ではもちろんmutexが必要と
逆に言えば、ループ内でメモリを直接読み取る場合で、かつ関数をまたがないパスがあるなら、
コンパイラが最適化をかけて書き戻し命令が削除される可能性があるのでvolatileが必要
ってことですよね
0101デフォルトの名無しさん
2011/10/03(月) 02:42:20.090102デフォルトの名無しさん
2011/10/03(月) 02:46:00.810103デフォルトの名無しさん
2011/10/03(月) 02:48:41.45あ、ちがうか
mutexでロックするならループ内で直接読み取る場合でもメモリ書き込みコードは削除されないから
結局ロックをかける限りvolatileはいらないってことになりますね。なるほど
0104デフォルトの名無しさん
2011/10/03(月) 02:49:06.75論理的に確実性がある分マシ
0105デフォルトの名無しさん
2011/10/03(月) 02:50:29.930106デフォルトの名無しさん
2011/10/03(月) 02:51:30.12だから主語を言えって。他人が読んでるわけで、
あんた一人が書いてるチラシの裏じゃないんだから。
0107デフォルトの名無しさん
2011/10/03(月) 09:29:22.60一部だけ変更可能にする方法ないでしょうか
全部一括でconstかmute しかないの?
0108デフォルトの名無しさん
2011/10/03(月) 12:49:54.36いやvolatileが導入された時点でその意味は変更されてる。
強制したければ、volatile修飾子付けるしかない。
0109デフォルトの名無しさん
2011/10/03(月) 12:57:28.340110デフォルトの名無しさん
2011/10/03(月) 13:02:03.86何が言いたいのかわかんない。
volatile有ろうが無かろうがあのコードの動作は変わらんぞ。
volatileの意味があるのはメモリマップドI/OとCの仕様書に
書いてあるようなシグナルとの通信のみ。
そのシグナルとの通信でさえ実際には、パイプとか
シグナル安全なブロッキング使うことになるから形骸的。
0111デフォルトの名無しさん
2011/10/03(月) 13:13:59.870112デフォルトの名無しさん
2011/10/03(月) 13:15:00.12関数から戻って来た後の値は不定。
呼び出す前にメモリに書き込まなくていいから。
0113デフォルトの名無しさん
2011/10/03(月) 13:18:11.58mutex呼んだ時点で書き込まれるから要らん。
逆にvolatileをmutex がわりにする事もできん。
0114デフォルトの名無しさん
2011/10/03(月) 13:20:43.340115デフォルトの名無しさん
2011/10/03(月) 13:23:53.16> シグナル安全なブロッキング使うことになるから形骸的。
シグナルハンドラ側でもアクセスしたい場合、
volatile付けとかないと。
Atomicityと最適化抑制の区別付けられてないのでは?
(他人がつけられてないと思っているが、
実際は自分がつけられてない)
0117デフォルトの名無しさん
2011/10/03(月) 13:40:16.33volatile指定と関数呼び出しは、(コンパイラにとっての)可換なメモリバリア指定なの?
0118デフォルトの名無しさん
2011/10/03(月) 13:46:28.10volatileはmemorry barrierと直接関係無い。
最適化抑制にすぎない。
Barrierは別に必要になる。
可換どころか直交。
0119デフォルトの名無しさん
2011/10/03(月) 13:49:37.11んなわけないじゃん
全ての値の変更は副作用完了点を通れば完了するよ
もしかして釣り?
0120デフォルトの名無しさん
2011/10/03(月) 15:12:52.88それからこのスレ的には、
副作用完了点なんてものは過去のもの。
0121デフォルトの名無しさん
2011/10/03(月) 15:15:46.190122デフォルトの名無しさん
2011/10/03(月) 15:22:28.38メモリバリアとか別の話をしてすまん
volatile指定と関数呼び出しは置き換え可能な最適化抑制なの?
0123デフォルトの名無しさん
2011/10/03(月) 16:41:48.24メモリアクセスに関する最適化抑制が出来るのはvolatileだけ。
0124デフォルトの名無しさん
2011/10/03(月) 16:47:12.660125デフォルトの名無しさん
2011/10/03(月) 16:55:04.78インライン展開されない関数で変数を挟めば最適化を抑制できる
スレッド間で変数を共有したいならmutexで挟め(volatileなんて忘れろ)
volatile信者はアホ
0126デフォルトの名無しさん
2011/10/03(月) 16:58:45.49// 別threadが↑ここで書き換える可能性
// atomic云々関係なしで
0127デフォルトの名無しさん
2011/10/03(月) 17:05:36.62> インライン展開されない関数で変数を挟めば最適化を抑制できる
出来ない。
評価順序の規程は同一実行スレッド内に限られた話。
順序は同一スレッドからas isでいいので、
副作用のある操作もメモリアクセスは保証されない。
なお、mutexは、例えばgcc/g++を使っている場合、
__asm__volatileを使って実装されている。
0128デフォルトの名無しさん
2011/10/03(月) 17:07:46.310129デフォルトの名無しさん
2011/10/03(月) 17:16:10.42なんでメモリバリアの話を持ち出すわけ?
メモリバリアしたけりゃmutex使え。
__asm__volatileとかそんな独自キーワード出されてもね。
0131デフォルトの名無しさん
2011/10/03(月) 17:33:53.18今の話はソースコード通りの読み書きが保証されるか?って話で同期は関係無いだろ
ところで>>125の話は、LLVMやLTOみたいな、
「inlineを付けてなくてもプログラム全体を通して1箇所からしか呼ばれてないから直接展開するぜ」
みたいな最適化をするコンパイラだとどうなるんだ?
0132デフォルトの名無しさん
2011/10/03(月) 17:44:13.510133111
2011/10/03(月) 17:52:10.950134デフォルトの名無しさん
2011/10/03(月) 17:57:21.53>直接展開するぜ
展開されちゃってるぞ。言いたいことは分かるけど。
0135デフォルトの名無しさん
2011/10/03(月) 18:07:31.55volatileがマルチスレッドに必要だと考えてるバカがいたから。
0136デフォルトの名無しさん
2011/10/03(月) 18:08:29.84そうだったな
それでも>>112が03でも11でも間違っていることに違いはないけど
0137デフォルトの名無しさん
2011/10/03(月) 18:08:52.34多分↓みたいな場合に最適化抑制用のvolatile修飾が変数vに必要か不要かって話じゃないの?
それでLLVMやLTO?でもそれは正しいのかっていう話だと思うけど
int v = 0;
mutex m;
void thread_main() {
for (;;) {
m.lock();
if (v) { m.unlock(); break; }
m.unlock();
}
}
0138デフォルトの名無しさん
2011/10/03(月) 18:27:10.91int discripter=-1;
void handler(int)
{
write(discripter ,略);
}
こういうケースなら論理上問題になら無い。
仕様でvolatileが保証すんのは、
シグナル実行中にグローバル変数の書き換えが発生した場合、
mainとhandlerどちらかの書き換えが飛ばされないということだけ。
handlerを動かす前に変数を初期化して、以降一切変更しないので
あれば影響無い。
因みにsignalとvolatileの話は、signal の仕様であってvolatileの
仕様ではない。別のページに書かれてる。
0139デフォルトの名無しさん
2011/10/03(月) 18:36:39.85不要な理由を挙げるとこんな感じか
mutexの実装にOSのAPIを呼んでいるならAPIの展開なんてまず無理。
アセンブラで実装してるなら副作用の有無が分からないからアセンブラを挟んで最適化しない。
たとえアセンブラのコードを解析して最適化しようとしても、メモリバリア命令の存在が分かるだろうからやっぱり最適化しない。
そもそもmutexを使用しているのに最適化されるならmutexの存在する意味が無い。
0140デフォルトの名無しさん
2011/10/03(月) 18:38:59.78「volatileの目的は,黙っていると処理系で行われる最適化を抑止するこ とにある.
例えば,メモリ・マップ方式の入出力をもつマシンでは,ステー タス・レジスタに対するポインタは,
ポインタによる見かけ上,冗長な参照 をコンパイラが除去するのを防ぐのに,
volatileへのポインタと宣言するこ とが可能である.」
元々目的も違う。
0141デフォルトの名無しさん
2011/10/03(月) 18:40:18.05あっ名前が切れた。ごめんなさい先生。
0142デフォルトの名無しさん
2011/10/03(月) 18:48:07.16全部憶測じゃないの?それ
結局はそのmutexの仕様、コンパイラの仕様、CPUアーキの仕様にC++の仕様を合わせて個別に確認しないと
何も保証されないし何もわからないってことですよね
0143デフォルトの名無しさん
2011/10/03(月) 19:00:05.66mutex=メモリバリアしてくれる関数を前提として話しているので
意味不明な心配をされても困るんだけど
まあC++11のstd::mutexでも使いなよ。規格で保障されてるんだから
0144デフォルトの名無しさん
2011/10/03(月) 19:00:40.20C++はスレッドなんか知らんからな。
だがmutexで囲む変数にvolatileを求める仕様は、
少なくともwindows ,unix, linux には無い。
0145デフォルトの名無しさん
2011/10/03(月) 19:04:26.330146デフォルトの名無しさん
2011/10/03(月) 19:27:17.69そもそもCじゃまともなスピンロックはできない。
特にマルチコアなら顕著。
出来るのはアセンブリレベル。
メモリから値を読み込み、条件判定をし、
ロックの更新をしてる間に、他のスレッドも
条件判定を通過できるんですぐ破綻する。
0147デフォルトの名無しさん
2011/10/03(月) 19:53:27.23規格の範囲内じゃmutexがどうこうなんてどうも言えん
0148デフォルトの名無しさん
2011/10/03(月) 19:55:36.81C++にはメモリバリアも仕様で追加されたし、今の仕様のvolatileを必要とするCPUは大量にあるし、
今後C++2x、C++5xが登場しようとvolatileがスレッドに絡んでくることは無いだろうな。
0149デフォルトの名無しさん
2011/10/03(月) 19:58:06.110150デフォルトの名無しさん
2011/10/03(月) 19:59:28.230151デフォルトの名無しさん
2011/10/03(月) 20:09:03.87std::atomicってそのためのもんじゃないのか
0152デフォルトの名無しさん
2011/10/03(月) 20:10:09.57#include <process.h>
#include <io.h>
void Thread(void* param)
{
volatile bool* flag = (volatile bool*)param;
while (*flag)
{
// 終わる? 終わらない?
}
printf("end\n");
_endthread();
}
int main()
{
bool flag = true;
_beginthread(Thread, 0, &flag);
Sleep(2000);
flag = false;
Sleep(2000);
}
これ、volatile がないとVC++2010では無限ループ
まあ、while 内に関数呼び出しがあると
その中で *flag が変更される可能性があると判断されて
無限ループじゃなくなるんだけどね
0153デフォルトの名無しさん
2011/10/03(月) 20:10:29.31横から悪いけど、11から副作用完了点って削除されるの?どう処理されるか厳密に決められた訳?
0154デフォルトの名無しさん
2011/10/03(月) 20:16:27.57http://d.hatena.ne.jp/Cryolite/20101228#p1
0155デフォルトの名無しさん
2011/10/03(月) 20:16:32.01だからmutex( CriticalSection )挟めばいいだろ。
なんでvolatileに拘るんだ?必要な最適化もされなくなくなって無駄なだけだぞ。
0156デフォルトの名無しさん
2011/10/03(月) 20:21:07.28http://hibari.2ch.net/test/read.cgi/tech/1253521167/
ほい
0157デフォルトの名無しさん
2011/10/03(月) 20:21:14.65割り込みは、他の関数呼び出しが無理やり入るだけで、呼び出された関数が
終了するまで本筋の処理は中断するんだぞ。スレッドみたいに並走はしない。
volatileが割り込みで使えたからと言って訳が違う。
0158デフォルトの名無しさん
2011/10/03(月) 20:37:09.390159デフォルトの名無しさん
2011/10/03(月) 20:38:28.20mutexはパフォーマンス落ちるからだろ
スレッド内でフラグ読むだけなら同期なんて要らないんだから
mutex使う方が無駄
あと、それはmutex用の「関数呼び出し」があるおかげで最適化されないというだけの危うい方法
0160デフォルトの名無しさん
2011/10/03(月) 20:39:05.76で、interlockedを使えば最適化とかキャシングとか何も考えずにコーディングすれば間違いは起こらない
ってことでいいの?
0161デフォルトの名無しさん
2011/10/03(月) 20:41:47.50>>146 と同じ話なんで論外。
運悪ければデータ破損する。
0162デフォルトの名無しさん
2011/10/03(月) 20:43:16.610163デフォルトの名無しさん
2011/10/03(月) 20:48:18.10その実際の処理でデータが破壊される。
ま、本当に何の処理もせず>>152のコードまんまを
走らせたいんならどうでもいいけど。
0164デフォルトの名無しさん
2011/10/03(月) 20:49:33.96flagを変更したタイミングを厳密に見たい場合は当然lockしないといけないけど、
大体で良ければ同期せずvolatileのフラグをポーリングしておけばいい
ワーカスレッドの動作をあまりパフォーマンス落とさずにキャンセルさせる時によく使う
実際には何かの処理を行うが、
関数呼び出しのないただの演算のみって場合もあるので
その場合はvolatileがないとアウト
0165デフォルトの名無しさん
2011/10/03(月) 21:07:20.72まぁいいや。スレ違いだそろそろやめるか。
0166デフォルトの名無しさん
2011/10/03(月) 21:08:29.600167デフォルトの名無しさん
2011/10/03(月) 21:08:48.400168デフォルトの名無しさん
2011/10/03(月) 21:09:54.190169デフォルトの名無しさん
2011/10/03(月) 21:10:11.11かなり汎用性にかけるので気持ち悪い。コードが複雑になってくればvolatileはバグの温床になるぞ
0170デフォルトの名無しさん
2011/10/03(月) 21:10:27.45フラグで中断しようが、スレッドで中断しようが演算結果に大差ない
0171デフォルトの名無しさん
2011/10/03(月) 21:19:07.10ありがとう。勉強になった
0172デフォルトの名無しさん
2011/10/03(月) 21:22:52.78ウェイトじゃないって
>>169
volatileは最適化を阻害するから汎用性はある
どのコンパイラだろうが汎用的に使えるよ
フラグにしか使わない(使えない)からこれ以上複雑になる事もない
>>170
ループ外に問題があったら駄目だろ
0173デフォルトの名無しさん
2011/10/03(月) 21:25:59.55volatileじゃメモリバリアの保証が無いだろ。マルチスレッドプログラミングに用いるのは間違い。
0174デフォルトの名無しさん
2011/10/03(月) 21:34:00.58スレッドは共有してる他の情報に手を出さないんだから
関係ないと思うが
0175デフォルトの名無しさん
2011/10/03(月) 21:34:18.870176デフォルトの名無しさん
2011/10/03(月) 21:36:57.65フラグチェックした「後」にどうこうすればいい話
わざわざループ内でlockのコストを払う必要はない
0177デフォルトの名無しさん
2011/10/03(月) 21:42:34.24書く時だけでしょ
0178デフォルトの名無しさん
2011/10/03(月) 21:43:39.49演算ループだけ追い出して、ループごと強制終了。本気で速度が欲しいならコレおすすめ。
0179デフォルトの名無しさん
2011/10/03(月) 21:45:22.13大体コストが気になるほど猛烈な勢いで終了flagをチェックしてるのか?
windowsのクリティカルセクションの開放取得で80〜200サイクルだぞ
0180デフォルトの名無しさん
2011/10/03(月) 21:50:45.800181デフォルトの名無しさん
2011/10/03(月) 22:02:26.890182デフォルトの名無しさん
2011/10/03(月) 22:10:39.540183デフォルトの名無しさん
2011/10/03(月) 22:15:20.220184デフォルトの名無しさん
2011/10/03(月) 22:22:40.420185デフォルトの名無しさん
2011/10/03(月) 23:37:45.83> 憶測はおいといて、環境依存なのは当たり前。
> C++はスレッドなんか知らんからな。
おいおい、規格ちゃんと読んでないのに、
そんな断定書き込むな。
4年くらい知識遅れてるじゃねーか。
0186デフォルトの名無しさん
2011/10/03(月) 23:44:26.750187デフォルトの名無しさん
2011/10/03(月) 23:50:37.83かつ、他の環境では不都合が起こる可能性があることを覚悟してるんなら、
volatileだろうが何だろうが使えばいいじゃない。
たが、残念ながらスレ違いだ。
ここはC++11スレなので、std::atomicやstd::mutexを使え、でFA
0188デフォルトの名無しさん
2011/10/03(月) 23:52:21.19volatile std::atomic<volatile int> a; みたいなサンプルコードをどっかで見たような
0189デフォルトの名無しさん
2011/10/03(月) 23:56:24.04いらない。
誰だよ、そんなサンプルコード書いた奴は
0190デフォルトの名無しさん
2011/10/03(月) 23:58:02.530191デフォルトの名無しさん
2011/10/04(火) 00:39:07.03N3290確認したらstd::atomicってvolatileメンバ関数いっぱい持ってるんだけど
これってvolatile atomicとして使う必要がある場合があることを想定してるんじゃないの
0192デフォルトの名無しさん
2011/10/04(火) 00:44:24.04想定してた名残じゃなければ気になるところ
0193デフォルトの名無しさん
2011/10/04(火) 02:10:28.99C1xとatomic関連の仕様を共通にしようとgdgdやってたときの名残。
当時はヘッダファイル名も<cstdatomic>だったりしたな。
0194デフォルトの名無しさん
2011/10/04(火) 06:16:29.370195デフォルトの名無しさん
2011/10/04(火) 09:23:15.830196デフォルトの名無しさん
2011/10/04(火) 09:39:35.63内部実装のために必要。
volatileなければ、ポータブルなatomic実装書くことは不可能。
0197デフォルトの名無しさん
2011/10/04(火) 09:58:31.950198デフォルトの名無しさん
2011/10/04(火) 10:31:42.660199デフォルトの名無しさん
2011/10/04(火) 10:38:32.66なぜそんな質問をいきなりするのか不明。
0200デフォルトの名無しさん
2011/10/04(火) 10:39:08.52ロード・ストアが1命令になるよう必ずコンパイルされるという仕様上の保証がなければ
「ポータブルに」atomicは書けないじゃん
0201デフォルトの名無しさん
2011/10/04(火) 11:15:52.69volatile修飾子なかったら全部asm volatileで書くしかない。
0202デフォルトの名無しさん
2011/10/04(火) 11:20:49.50昔から全く状況は変わっていないし何を問題にしているのかわからない
処理系依存のコードと誤ったコードというのは別だろ
0203デフォルトの名無しさん
2011/10/04(火) 11:42:38.00ポータブルに書く必要はないし、
std::atomicの下はこのスレの範囲外だよ。gccスレなりvcスレなりで話せばいい
0204デフォルトの名無しさん
2011/10/04(火) 13:15:24.92ねぇよ。アセンブリ命令がどうなるかなんて規定は無い。
ただCレベルから見て無駄な演算が消えたり、
Cレベルから見た演算順序が維持される。
例えば32bit環境で64bitの型を使うと
volatile 付けてても
2分割してメモリに書き込まれたりする。
0205デフォルトの名無しさん
2011/10/04(火) 13:19:08.04CASってなんだ?
工業用のあれでは無いよな。
0206デフォルトの名無しさん
2011/10/04(火) 14:13:45.96なんでごっちゃになってるの?
volatile って代入した次の瞬間にその変数の値は蒸発してしまって
何が入っているか見当がつかないっていう、それだけの意味だろ……
0207デフォルトの名無しさん
2011/10/04(火) 14:40:43.25>volatile と atomic 操作ってまったく関係ないのに
>なんでごっちゃになってるの?
>
エスパーすると、「Writeスレッドがread-modify-writeしない場合は、volatile指定すれば良い」という認識のサイトが多いから、それで勘違いしてるんでは?
0208デフォルトの名無しさん
2011/10/04(火) 15:05:07.490209デフォルトの名無しさん
2011/10/04(火) 15:44:54.96このスレにはそんな書き込みしてる奴いないのにねえ。
0210デフォルトの名無しさん
2011/10/04(火) 15:57:47.36> volatile指定しても他のスレッドでのアクセスが反映される保証は無いというのは
> 昔から全く状況は変わっていないし
C++11規格の第一章すら読んでないの丸バレ。
0211デフォルトの名無しさん
2011/10/04(火) 16:06:18.66新しい規格でvolatileの意味がまともに決まってないと思える頭の構造が分からん。
「全てのスレッドで〜」と説明するサブセクションでvolatileが言及されてるのに!
0212デフォルトの名無しさん
2011/10/04(火) 16:31:14.871章読み直したがやっぱり変わってないぞ
0213デフォルトの名無しさん
2011/10/04(火) 18:03:43.980214デフォルトの名無しさん
2011/10/04(火) 18:25:15.490215デフォルトの名無しさん
2011/10/04(火) 19:47:22.140216デフォルトの名無しさん
2011/10/04(火) 21:27:21.33これって最新の規格?
まだ未確定の時のヤツ?
0217デフォルトの名無しさん
2011/10/04(火) 21:31:37.67volatile用のatomicが必要だからオーバーロードしてあるだけじゃねぇか。
0218デフォルトの名無しさん
2011/10/04(火) 21:35:32.820219デフォルトの名無しさん
2011/10/04(火) 21:35:58.91そもそも規格ですらない
ただのテクニカルレポート
0220デフォルトの名無しさん
2011/10/04(火) 21:37:41.28メモリマップドIOにatomic使う訳でもないだろうし
0221デフォルトの名無しさん
2011/10/04(火) 21:40:00.58いや正しいだろ。
0222デフォルトの名無しさん
2011/10/04(火) 21:42:49.13組み込みの世界じゃコアが32個とかザラだし。
0223デフォルトの名無しさん
2011/10/04(火) 21:49:18.290224デフォルトの名無しさん
2011/10/04(火) 21:50:33.290225デフォルトの名無しさん
2011/10/04(火) 21:57:35.91んじゃまぁいいや
0226デフォルトの名無しさん
2011/10/04(火) 22:00:30.94メモリマップドI/Oの際、連続して値を代入することが求められる。
そのため1回のロックをしている間複数回値の代入をする場合がある。
atomicはテンプレートでありインライン展開される。
インライン展開された場合、関数が消失し、その中にあるvolatile変数へ
の代入も消失する可能性がある。
よってvolatileを維持するためにatomicはvolatileメンバーを持っている。
0227デフォルトの名無しさん
2011/10/04(火) 22:05:53.69みたいにして使えるの?
0228デフォルトの名無しさん
2011/10/04(火) 22:08:40.87まとめも糞もおんなじ様なこと書いてあんじゃん
[ Note: Many operations are volatile-qualified. The "volatile as device register" semantics have not changed
in the standard. This qualification means that volatility is preserved when applying these operations to
volatile objects. It does not mean that operations on non-volatile objects become volatile. Thus, volatile
qualified operations on non-volatile objects may be merged under some conditions. ― end note ]
0229デフォルトの名無しさん
2011/10/04(火) 22:11:13.23せめて正式版ではないにしろ>>216ぐらいは読め。
volatile atomic< int* > device = reinterpret_cast< int *>( 0x00000111 );
0230デフォルトの名無しさん
2011/10/04(火) 22:11:52.610231デフォルトの名無しさん
2011/10/04(火) 22:38:22.870232デフォルトの名無しさん
2011/10/04(火) 22:48:43.94こうできるといわれてみれば確かになんだが、地味に感心した。
0233デフォルトの名無しさん
2011/10/04(火) 23:11:17.03それはともかくusingが地味に便利っぽいな。多重継承したとき、
1つに実装があればその実装でオーバーライドできるとか。
なんで今まで出来なかったのか。
0234デフォルトの名無しさん
2011/10/04(火) 23:15:06.320235デフォルトの名無しさん
2011/10/05(水) 01:37:13.95メモリマップドIOに普通のint型とかじゃなくてatomicを使う理由は何?
volatile atomic<int>じゃなくてvolatile intでいいじゃん。
0236デフォルトの名無しさん
2011/10/05(水) 01:51:02.01他のCPUが信号送ってる途中に割り込むから危険だろうが。
0237デフォルトの名無しさん
2011/10/05(水) 02:39:44.19メモリマップ領域の同じアドレスに、異なるスレッドが同時に書き込んだりは普通しないでしょ。
別途mutexなどで排他し、同時アクセスはしないようにするだろ。
0238デフォルトの名無しさん
2011/10/05(水) 03:43:38.370239デフォルトの名無しさん
2011/10/05(水) 03:56:35.32ほっとくとvolatileだけで大丈夫キリッとか言い出す馬鹿がいるから
0240デフォルトの名無しさん
2011/10/05(水) 07:18:03.94これってatomic<T>をvolatile atomic<T>にキャストしてもvolatileにならないから注意しろって書いてあるだけだよね
0241240
2011/10/05(水) 08:10:57.620242デフォルトの名無しさん
2011/10/05(水) 08:19:15.800243デフォルトの名無しさん
2011/10/05(水) 12:56:41.08atomicの書き方しってる?
0244デフォルトの名無しさん
2011/10/05(水) 16:11:18.22あるメモリアドレスAに1を書きこんでからアドレスBのデータを読み込み最後にアドレスAに0を書く、
みたいな一連の操作の排他は、アドレスAやBをatomic変数にしてもできないでしょ。
0245デフォルトの名無しさん
2011/10/05(水) 16:35:48.580246デフォルトの名無しさん
2011/10/05(水) 16:43:31.80「一連」の操作にするにはmutex必須だな
「書き捨て」でいいならatomicで足りる
0247デフォルトの名無しさん
2011/10/05(水) 17:23:54.810248デフォルトの名無しさん
2011/10/05(水) 22:17:58.620249デフォルトの名無しさん
2011/10/05(水) 22:34:38.51お前恥ずかしくないか
0250デフォルトの名無しさん
2011/10/05(水) 22:51:18.85そのコードも変だぞ
0251デフォルトの名無しさん
2011/10/05(水) 22:53:31.52atomicとvolatileをマスターすれば食うに困らんな。
0252デフォルトの名無しさん
2011/10/05(水) 23:39:25.040253デフォルトの名無しさん
2011/10/05(水) 23:43:35.340254デフォルトの名無しさん
2011/10/05(水) 23:59:21.770255デフォルトの名無しさん
2011/10/06(木) 00:02:04.23volatileを付けるかどうか迷ったら付けとこう
0256デフォルトの名無しさん
2011/10/06(木) 00:07:41.330257デフォルトの名無しさん
2011/10/06(木) 00:51:52.74このスレには素人しか居ませんから。
0258デフォルトの名無しさん
2011/10/06(木) 01:21:52.12それともまだ見送り?
0259デフォルトの名無しさん
2011/10/06(木) 01:22:55.740260デフォルトの名無しさん
2011/10/06(木) 01:40:24.28それともまだ見送り?
0261デフォルトの名無しさん
2011/10/06(木) 01:43:27.630262デフォルトの名無しさん
2011/10/06(木) 01:58:23.26アホ
0263デフォルトの名無しさん
2011/10/06(木) 02:09:09.06実装がLinkedListによるものだったらどうするつもりなんだろう・・・。
0264デフォルトの名無しさん
2011/10/06(木) 02:20:05.36全開のvectorの直列仕様もどうなんだろ。
もっとましなアドレス取得用のインタフェース用意してくれんかね。
0265デフォルトの名無しさん
2011/10/06(木) 02:27:47.56正直、C言語使わないのであれば、参照でVector本体を渡してしまうので、アドレスの直列性とかはあんまり気にならんなー。
Cであってもstdioでファイル書きこむときくらいじゃないかな?直列性なくて困るのって。
0266デフォルトの名無しさん
2011/10/06(木) 07:22:35.45困る関数もあんだろ
0267デフォルトの名無しさん
2011/10/06(木) 07:51:22.83SIMDが面倒
0268デフォルトの名無しさん
2011/10/06(木) 08:38:24.71どうかはなんら保証は無いよな。
>>152みたいにいつ止まろうがどうでもいい例は別として。
もしかしたら無限ループになるかもしれんけど。
0269デフォルトの名無しさん
2011/10/06(木) 09:29:15.310270デフォルトの名無しさん
2011/10/06(木) 10:39:00.69マルチスレッドがらみじゃないならスレ違い、
初心者スレで教えてもらってこい。
0271デフォルトの名無しさん
2011/10/06(木) 10:50:38.380272デフォルトの名無しさん
2011/10/06(木) 11:24:57.530273デフォルトの名無しさん
2011/10/06(木) 12:35:10.62Cでも列挙子のインターフェースを提供すればいいじゃないか
COMのCINTERFACEのように見苦しくなりかねないが下手に並べ直すよりもコストは低いと思う
0274デフォルトの名無しさん
2011/10/06(木) 12:55:21.98ここは規格についてのスレだろ
0275デフォルトの名無しさん
2011/10/06(木) 13:00:29.65初心者もくそもJIS規格読んでみろや知ったかぶり
0276デフォルトの名無しさん
2011/10/06(木) 20:10:59.860277デフォルトの名無しさん
2011/10/06(木) 21:38:22.44なんで ``JIS規格'' か, 汲んでやれよ
英語読めない低能だから吠えてんだろ?
0278デフォルトの名無しさん
2011/10/07(金) 17:52:05.360279デフォルトの名無しさん
2011/10/07(金) 19:15:11.05今は違うのか?
0280デフォルトの名無しさん
2011/10/07(金) 20:00:42.74CとC++0xのautoくらい違う
0281デフォルトの名無しさん
2011/10/07(金) 20:09:11.55http://www.ibm.com/developerworks/jp/java/library/j-dcl/
>多くのJVMでは、順序の一貫性について、volatile が正しく実装されません。
ってのが今はどうなのかって事
0282デフォルトの名無しさん
2011/10/07(金) 20:12:41.25JSR133によって仕様が云々とか。
0283デフォルトの名無しさん
2011/10/07(金) 20:23:13.62良かった良かった
0284デフォルトの名無しさん
2011/10/07(金) 20:47:26.64さすがに、まだ未解決のはずがない。
0285デフォルトの名無しさん
2011/10/07(金) 21:14:03.98そっちでもやっぱり使い方間違ってる人がいる、
ってだけ。
0286デフォルトの名無しさん
2011/10/07(金) 21:24:39.250287デフォルトの名無しさん
2011/10/07(金) 21:43:37.82JISが不正確かどうかしらんが、volatileがメモリーに常に割り当てるかどうかはやっぱり未定義。
割り込みでsig_atomic_tを使った場合はともかく、スレッドで全てのシンボルが同一の値を指してる保証はない。
さてvolatile厨はどう反論するきだ?
0288デフォルトの名無しさん
2011/10/07(金) 21:46:25.88マニュアル読まない奴はカス
0289デフォルトの名無しさん
2011/10/07(金) 21:54:38.27永遠に異なる値を指す事はあり得ないので
タイミングが重要でないものに使うのは問題ないと何度言えば
0290デフォルトの名無しさん
2011/10/07(金) 21:54:56.88規格のスレでほざくんじゃねぇ。
0291デフォルトの名無しさん
2011/10/07(金) 21:58:36.61割り込みと違ってスレッドの場合は、永遠と値が異なる処理系があっても構わん。
命令の順序さえ変わらなきゃいいんだから、少しでも早くしたいリアルタイム系の
処理系なら有りうる。
0292デフォルトの名無しさん
2011/10/07(金) 22:00:02.200293デフォルトの名無しさん
2011/10/07(金) 22:01:37.140294デフォルトの名無しさん
2011/10/07(金) 22:06:45.31具体的にどういう処理系があんだ
0295デフォルトの名無しさん
2011/10/07(金) 22:12:40.362.関数を呼ばない
1つの関数内でこれが守られていれば、
グローバル変数は関数の最初とreturn 時以外は
レジスタに配置しておいても規格上問題はない。
0296デフォルトの名無しさん
2011/10/07(金) 22:18:13.92最適化はvolatileつきでは行わないとか
volatileオブジェクトはabstract machineのルールに厳密に従わないといけないとか
書いてあるんだけど
0297デフォルトの名無しさん
2011/10/07(金) 22:22:51.54レジスタかメモリーか、それどころかvolatileの向こうは
ハードウェアですらいいことになってるんだけど。
0298デフォルトの名無しさん
2011/10/07(金) 22:23:35.66それを検知できるというのがvolatileだ
要するに鼻から出てきた悪魔がメモリを変更しても
volatileがついてたらそれを検知できないといけない
ただ、現実問題同時性までは保証してないようだが
0299デフォルトの名無しさん
2011/10/07(金) 22:27:58.44名前からして揮発修飾しだしね。
volatile
No cacheing through this lvalue: each operation in the abstract semantics must
be performed (that is, no cacheing assumptions may be made, since the location
is not guaranteed to contain any previous value). In the absence of this qualifier,
the contents of the designated location may be assumed to be unchanged except
for possible aliasing.
0300>>299
2011/10/07(金) 22:29:27.680301デフォルトの名無しさん
2011/10/07(金) 22:34:17.38変更する奴が誰か分かっていて、
さらに変更する奴がいないと分かってる状態で
永遠に異なる値を指してもいいってのは拡大解釈じゃね
0302デフォルトの名無しさん
2011/10/07(金) 22:39:21.99volatileを付けた時点で変数が以前の値を保持する義務が無くなる。
0303デフォルトの名無しさん
2011/10/07(金) 22:42:17.58値が勝手に変わる事を保証しないと駄目だろ
以前の値を保持されちゃ困るからvolatileつけるってのに
0304デフォルトの名無しさん
2011/10/07(金) 22:46:00.78別に保証はいらなくて考慮さえされてればいい
0305デフォルトの名無しさん
2011/10/07(金) 22:46:09.01>>287 の75ページから読んでみろ。 >>299に書いてある内容の続きがあるから。
0306デフォルトの名無しさん
2011/10/07(金) 22:58:15.42応用すれば一番確実な方法は
int value;
const volatile int *referece = &value;
って事らしい。
0307デフォルトの名無しさん
2011/10/07(金) 23:04:11.69左辺値のアクセス自体に対しては特に特殊な要求はないように見えるが
で、同じ左辺値が誰も変更操作を行ってないのに
見る箇所によって異なる値を持ち続けて良いのか、という事、
これはvolatileとは無関係な話でvolatileの規格だけ見ても埒があかない
0308デフォルトの名無しさん
2011/10/07(金) 23:09:25.250309デフォルトの名無しさん
2011/10/07(金) 23:09:45.90volatileオブジェクトへの書き込みは他スレッドから見られることになりました。
0310デフォルトの名無しさん
2011/10/07(金) 23:10:22.660311デフォルトの名無しさん
2011/10/07(金) 23:11:01.37volatile変数がメモリー上に存在しないかどうかは完全に処理依存。
0312デフォルトの名無しさん
2011/10/07(金) 23:11:27.52ソース。
0313デフォルトの名無しさん
2011/10/07(金) 23:12:27.63グローバル変数の話はどうでもいいよ・・・
0314デフォルトの名無しさん
2011/10/07(金) 23:16:09.08extern const long hard_clock;
0315デフォルトの名無しさん
2011/10/07(金) 23:16:58.27extern const volatile long hard_clock;
0316デフォルトの名無しさん
2011/10/07(金) 23:18:12.99メモリアドレス振られるのは保証されるんじゃない
0317デフォルトの名無しさん
2011/10/07(金) 23:22:37.92レジスタには置かれないな
てかexternのものはそもそも実体がレジスタには置かれない・・・よね?
0318デフォルトの名無しさん
2011/10/07(金) 23:23:37.96ポインタじゃなくても使うことがあるという例を書いただけ
0319デフォルトの名無しさん
2011/10/07(金) 23:29:35.55メモリに置かれるとは限らない、という話だが、
グローバル変数をレジスタに置くのは規格に沿うのだろうか
registerはグローバル変数に付けられないし
0320デフォルトの名無しさん
2011/10/07(金) 23:48:49.69あり得なくはない・・・のか?
0321デフォルトの名無しさん
2011/10/08(土) 00:02:49.42元々registerは強制的にレジスタを割り当てる修飾子だったんだから
広域変数に割り当てられないのは当然だろ。関数呼び出しがおかしくなる。
register就職できないとはいえ、関数内で広域変数をレジスタに
割り当てるのはコンパイラの自由。というかレジスタマシンじゃ
割り当てないと計算できん。
0322デフォルトの名無しさん
2011/10/08(土) 00:22:10.59複数関数で使ってても?
0323デフォルトの名無しさん
2011/10/08(土) 14:40:52.77このスレを>>93あたりから読み直せ
0324デフォルトの名無しさん
2011/10/08(土) 23:40:35.76スレッドを無視すれば、関数から脱出するか、
別の関数を呼び出すまでレジスタだけに値を置いといても問題はない。
割り込みがあっても、sig_atomic以外は保持する義務も無いし、
言語仕様に基づいてプログラム書いてる限りでは、レジスタの値だけを
更新することは問題にはなりえんよ。
0325デフォルトの名無しさん
2011/10/09(日) 00:40:00.98複数スレッドで1つのレジスタを共有なんてのは当たり前
おおかた ARM のバンク切り替えあたりで思考停止したようだな
0326デフォルトの名無しさん
2011/10/09(日) 03:12:36.260327デフォルトの名無しさん
2011/10/09(日) 05:09:23.78全部アセンブリで書くことなんて無いだろ。
てか、アセンブラで書くなんてほざいてる時点で
まともにアセンブリコード書いたこと無いだろ。
0328デフォルトの名無しさん
2011/10/09(日) 09:05:09.040329デフォルトの名無しさん
2011/10/09(日) 09:37:27.47そうでなくても割り込みなんぞ本質的にマルスレだね
ユニプロでちまちま書くかあっさり疎結合かにもよるが
前者ならレジスタ共有は捨てがたいテクだし
0330デフォルトの名無しさん
2011/10/09(日) 09:43:30.72コンテキストスイッチがない
0331デフォルトの名無しさん
2011/10/09(日) 10:32:24.34逆に CPU アフィニティなんぞコンテキストスイッチのないマルスレだしな
0332デフォルトの名無しさん
2011/10/09(日) 11:05:07.120333デフォルトの名無しさん
2011/10/09(日) 11:29:46.94「シグナルで割り込まれた側には、割り込んだシグナルハンドラの実行が終わるまで処理が戻ってこない」
ってこと。だから、内部でmutexを使ってるような関数をシグナルハンドラから呼ぶと簡単にデッドロックしてしまう。
mutexすらロクに使えないものを「スレッドの一種」とは言えないよねえ。
0334デフォルトの名無しさん
2011/10/09(日) 11:33:27.06> CPU アフィニティなんぞコンテキストスイッチのないマルスレだしな
は?
じゃあ、シングルコアCPUでのマルチスレッドでは「コンテキストスイッチ」がないのかい?
馬鹿馬鹿しい。
0335デフォルトの名無しさん
2011/10/09(日) 13:29:20.72割り込みは違うわな
0336デフォルトの名無しさん
2011/10/09(日) 16:06:15.87割り込みは、並列稼働しないだろ。
割り込み処理が終わるまで、
メインの処理は止まる。
0337デフォルトの名無しさん
2011/10/09(日) 16:19:59.860338デフォルトの名無しさん
2011/10/09(日) 16:47:53.59// プリエンプトってどうやるんだっけね
0339デフォルトの名無しさん
2011/10/09(日) 16:50:22.01全然別物だと気づくはずなんだけどな。
0340デフォルトの名無しさん
2011/10/09(日) 17:24:39.53コンテキストスイッチなんてPen3以前の頃からあったろ
0341デフォルトの名無しさん
2011/10/09(日) 17:34:12.67どのCPUでどういう処理書いててレジスタの退避けちったの?
普通、一つのスレッドは全てのレジスタを使う可能性が有るし
正数演算系のレジスタは全て使い倒さないと非効率だから
全部退避対象になるでしょ。
スレッド間でレジスタ共有なんてしたら非効率な上に危険。
0342デフォルトの名無しさん
2011/10/09(日) 18:02:44.96OSもあるなら、なんていうOSか聞きたい。
でも結局、昔の(Z80とかであるような)割り込みなんだろうな、そうなら書かなくていいよ。
0343デフォルトの名無しさん
2011/10/09(日) 18:13:42.53Pen2 にコンテキストスイッチがあったとかさー、
再入可能モジュールは色々あるとかさー、
なんか (1+1) は (2) みたいなことを説教されてもリアクションに困るんだよね
そういやレジスタの同時使用数が多いと最適化が裏目に出る CPU なんてのもあったね
0344デフォルトの名無しさん
2011/10/09(日) 18:24:18.15何が言いたいんだ?
アフィニティだろうがコンテキストスイッチは無くならんぞ。
0345デフォルトの名無しさん
2011/10/09(日) 18:34:21.46少なくとも減らすためにすることで
減らなかった分はアフィニティと関係ないし
0346デフォルトの名無しさん
2011/10/09(日) 18:50:52.18で、何が言いたいんだ?
今までの流れだと、お前はコンテキストスイッチの無い
スレッドが存在すると主張してるように見えたんだが。
0347デフォルトの名無しさん
2011/10/09(日) 19:03:07.03だから、そうだよ
違うって言いたいのか?
0348デフォルトの名無しさん
2011/10/09(日) 19:49:51.41せめてC++11絡めて話せよ
0349デフォルトの名無しさん
2011/10/09(日) 19:51:14.380350デフォルトの名無しさん
2011/10/09(日) 20:01:44.68お前の話に一度もコンテキストスイッチの存在しない
実在環境の話が出てない。
あとC++の話に戻すと、割り込みで使えた方法だとして、
スレッドと割り込みは別物なので
スレッドで安全に使えない。
C++が割り込みに対し保証してること=スレッドに対する保証
ではない。
0351デフォルトの名無しさん
2011/10/09(日) 20:36:50.79そうか、聞きてえのかw >実在環境
お願いしろよ、言ってやるかも知んねえから
そもそもレジスタ共有は割り込みかスレッドかには関係ねえし
0352デフォルトの名無しさん
2011/10/09(日) 20:41:30.130353デフォルトの名無しさん
2011/10/09(日) 20:51:45.96レジスタ共有するにはわざわざそのレジスタの内容をメモリから復帰しないといけなくて
使い物にならない
0354デフォルトの名無しさん
2011/10/09(日) 21:02:08.86言語は使う人が何を考えることができるのかを決めてしまう by禿
もっともお前さんが言ってるのは言語より以前の話なんだが
0355デフォルトの名無しさん
2011/10/09(日) 21:08:56.11ここは何スレだ一体
0356デフォルトの名無しさん
2011/10/09(日) 21:11:01.05バカは言語に使われるbyゲイツ
0357デフォルトの名無しさん
2011/10/09(日) 21:11:03.28ご苦労な事だ
0358デフォルトの名無しさん
2011/10/09(日) 21:44:23.82おれは >>331 じゃないが
80系とかをセンブラで書いても普通にタスクスイッチするよ?
# なければ作るし
割り込みだけは特別扱いで, 全部アセンブラってノリかな
0359デフォルトの名無しさん
2011/10/09(日) 21:58:02.02レジスタ共有はないな
0360デフォルトの名無しさん
2011/10/09(日) 22:05:01.18まぁな
0361デフォルトの名無しさん
2011/10/10(月) 15:43:22.96言語以前にレジスタ機械の問題だろ
0362デフォルトの名無しさん
2011/10/10(月) 15:56:56.63> C++erの視野の狭さは異常
そういうことじゃないんだよ。
ようやく、ちょっと口を挟める話になったから、
何人もの雑魚が知ったかぶって、見当違いの
レベルの低い話をしているだけ。
こいつらは C++er じゃなくて、ただの雑魚。
0363デフォルトの名無しさん
2011/10/10(月) 15:59:17.97C++もおしまいだな
0364デフォルトの名無しさん
2011/10/10(月) 16:01:20.55そしてJavaにも存在して意味合いが違ってたりしてまた混乱に拍車をかける
0365デフォルトの名無しさん
2011/10/10(月) 16:14:22.39ハードウェアがその値を変更せずとも、
コンパイラが生成したコードが適当なタイミングで勝手に値を変えても規格合致だと?
本当か?
0366デフォルトの名無しさん
2011/10/10(月) 16:44:58.35既にソースが上がってるだろ。
読めよ。
0367デフォルトの名無しさん
2011/10/10(月) 17:19:29.34禿の爺さんも、チンポカムウアやエピスカレーの努力も認めるよ。
でもあれは呪文コードだって。
あんな、言語どうでもいいわ、と思えるのは仕方ないことだわ。
禿は禿で読む気にもならんツマラン入門書、書いてるし。
もう、C++終われよ
0368デフォルトの名無しさん
2011/10/10(月) 17:26:43.30「馬、鹿、。。」の文字がw
0369デフォルトの名無しさん
2011/10/10(月) 17:34:17.77このスレでageてる書き込みはほとんどカスの書き込みだな
0370デフォルトの名無しさん
2011/10/10(月) 17:36:41.69どうか、みなさん御容赦を。
こら! 頭下げんか、できそこないのカスがw
0371デフォルトの名無しさん
2011/10/10(月) 17:45:35.820372デフォルトの名無しさん
2011/10/10(月) 17:55:21.12ないぞ
0373デフォルトの名無しさん
2011/10/10(月) 17:55:47.71同期プリミティブ書いてる人も使っているよ。
0374デフォルトの名無しさん
2011/10/10(月) 18:13:26.71何仕様もまともに読めない癖にC++乏してんの。
そういうのは一通りiso読んでからやれや。
0375デフォルトの名無しさん
2011/10/10(月) 18:17:20.49>>287
C99の仕様解説だがC++とは共通。
0376デフォルトの名無しさん
2011/10/10(月) 18:23:02.03ソース
0377デフォルトの名無しさん
2011/10/10(月) 18:30:17.51volatileオブジェクトは複数プロセス間で共有する変数として適用可能って書いてるぞ
0378デフォルトの名無しさん
2011/10/10(月) 18:38:26.19volatileオブジェクトは複数プロセス間で共有する変数として適用可能
const volatileオブジェクトは別プロセスで変更される変数として適用可能
勝手に値が変わっても良いなんて書いてないが
適用可能≠全環境で適用可能であって
何に適用できるようにするかは処理系依存と書いてあるな
メモリマップドI/Oや共有に使えると処理系のドキュメントに書いてあれば
そのように使って構わないと言う事か
逆に、これら全部に使えもしないような実装でも一応規格合致なのか
そんな糞実装実際問題ないだろうけど
0379デフォルトの名無しさん
2011/10/10(月) 18:45:10.93プロセスであってスレッドでは無い。
0380デフォルトの名無しさん
2011/10/10(月) 18:50:02.8175ページの20 volatileに書いてあるだろ。
以前の値を保持することは保証しない。
0381デフォルトの名無しさん
2011/10/10(月) 19:08:56.21フリーズに入ってからこのスレもうグダグダ棚
0382デフォルトの名無しさん
2011/10/10(月) 19:14:18.50プロセス内でも共有されるのだからスレッドでも共有される
それにプロセスってのは単なる例に過ぎない
>>380
どこまで保持するかは処理系依存と書いてある
処理系が保証すれば問題ない
0383デフォルトの名無しさん
2011/10/10(月) 19:28:50.61スレッドとプロセスは全然違うだろ、何いってんだ?
0384デフォルトの名無しさん
2011/10/10(月) 19:31:17.39処理系依存ってのは、ずっと解ってることじゃん。
0385デフォルトの名無しさん
2011/10/10(月) 19:40:30.12?
0386デフォルトの名無しさん
2011/10/10(月) 19:51:38.92基本的に共有領域へのポインタによるアクセスになる。
この時ポインタにvolatile修飾が有れば、
共有領域への書き込みは保証される。
ただし、ポインタ自信がどこに有るかは不定。
ちなみにMSのコンパイラだとdata_segを使って
変数の実体を共有できるが、volatileで修飾された変数が
msで使用されることはない。
0387デフォルトの名無しさん
2011/10/10(月) 19:58:20.71入力されたパスワード領域を後で確実にクリアするのにもvolatile使ってなかったっけ?
なんか昔問題になったような気がする。std::secure_fillみたいのがあればいいな。
0388デフォルトの名無しさん
2011/10/10(月) 20:22:22.52メモリが共有されるスレッドと共有されないプロセスじゃ安全性が全然違。。。
0389デフォルトの名無しさん
2011/10/10(月) 20:34:10.720390デフォルトの名無しさん
2011/10/10(月) 21:03:13.88何の事だ?どの仕様のどこに書いてある?
それはスレッドの項目に書いてある内容で
volatile固有の話じゃないだろ。
0391デフォルトの名無しさん
2011/10/10(月) 21:19:41.35volatile固有ではないが、volatileにも当然適用される
0392デフォルトの名無しさん
2011/10/10(月) 22:21:07.680393デフォルトの名無しさん
2011/10/10(月) 22:22:23.390394デフォルトの名無しさん
2011/10/10(月) 23:22:28.70プロセスAのスレッドa1とプロセスBのスレッドb1で共有しているし
プロセスAのスレッドa1とプロセスBのスレッドb2でも共有しているし
つまりプロセスBのスレッドb1とプロセスBのスレッドb2で共有しているということ
0395デフォルトの名無しさん
2011/10/10(月) 23:38:15.86バカじゃねぇの。プロセス間通信とスレッド間通信の問題で
一般化された概念がどうとかいってねぇだろ。
0396デフォルトの名無しさん
2011/10/11(火) 00:06:36.550397デフォルトの名無しさん
2011/10/11(火) 00:54:15.360398デフォルトの名無しさん
2011/10/11(火) 00:57:15.330399デフォルトの名無しさん
2011/10/11(火) 01:00:51.34でたらめな話だけど
0400デフォルトの名無しさん
2011/10/11(火) 01:56:13.650401デフォルトの名無しさん
2011/10/11(火) 03:56:07.500402デフォルトの名無しさん
2011/10/11(火) 05:03:57.84http://ja.wikipedia.org/wiki/C%2B%2B0x
別についていかなくても、互換性はそれなりに保たれてるから安心して
これまでどおり使っててもいいんだぜ。どうせ C++03 切り捨てて使えるように
なるまでにはもう何年かかかるんだろうし。
0403デフォルトの名無しさん
2011/10/11(火) 05:27:43.32仕様じゃ保護されん。
それだけの話。
0404デフォルトの名無しさん
2011/10/11(火) 05:57:41.540405デフォルトの名無しさん
2011/10/11(火) 06:15:54.530406デフォルトの名無しさん
2011/10/11(火) 07:34:15.91linux じゃwchar_t は32bit だし
移植したい人にはべんりでしょ。
0407デフォルトの名無しさん
2011/10/11(火) 07:53:20.87wchar_tと比べてなんか面倒くさそう
てかchar16_tってサロゲートペア考慮してるのかな
0408デフォルトの名無しさん
2011/10/11(火) 08:07:30.520409デフォルトの名無しさん
2011/10/11(火) 08:20:07.76一応UTF系はサポートするそうな。
詳しくは仕様書見ろ。
0410デフォルトの名無しさん
2011/10/11(火) 09:20:23.89別に型用意した分混乱少なさそうだけど、実際どういう使われ方になるのかなと
0411デフォルトの名無しさん
2011/10/11(火) 10:15:31.84処理系依存のコードであって誤ったコードではないと言ったんだよ
当たり前だろ
0412デフォルトの名無しさん
2011/10/11(火) 10:38:57.49正確には「処理系依存」ではなく「未定義動作」だ。
0413デフォルトの名無しさん
2011/10/11(火) 10:42:00.010414デフォルトの名無しさん
2011/10/11(火) 10:53:21.95ループ脱出を他スレッドから指示するフラグ変数のように、
C++0xではstd::atomicを使うべきところに
単なるvolatile変数を用いているコード。
0415デフォルトの名無しさん
2011/10/11(火) 11:00:06.43char16_t/char32_tは読み込み用のバッファにして使う時はwstringに変換するとか?
もしいろんなライブラリがwchar_tから移行するなら移行するんだろうけど、どうなんだろ
0416デフォルトの名無しさん
2011/10/11(火) 11:25:42.89C++11 のスレッドで使うと data race が発生するから未定義動作、ってことでおk?
それって C++03 までは単に処理系依存なコードじゃないの?
0417デフォルトの名無しさん
2011/10/11(火) 11:41:38.35C++03単体で言えば undefined でしょ。仕様書でスレッドについて何も定義していないんだから。
C++03 + pthread みたいに組み合わせてはじめて
処理系依存だとかそういう話ができるわけで
0418デフォルトの名無しさん
2011/10/11(火) 12:29:17.61規格で何も定義していないことを指して未定義動作だとか undefined だとか、
明示的に未定義とされた箇所とまぎらわしいからやめてくれ。
C++03 以前の話なら pthread なり何なりの仕様と照らし合わせないと結論は
出ないでしょ。
0419デフォルトの名無しさん
2011/10/11(火) 13:29:29.52なんで区別する必要がある?
明示的だろうとそうでなかろうと、
仕様書の範囲外のことなので実装がどうなってようが関知しない
ってことでしょうが。
0420デフォルトの名無しさん
2011/10/11(火) 14:29:01.99ライブラリとしてスレッドが実装・利用されていた事実に反すると思ったんだけど、
規格としてはそうなるか。
ごめんよ。
0421デフォルトの名無しさん
2011/10/11(火) 19:35:27.92処理系依存です
Whatever decisions are adopted on such issues must be documented,
as volatile access is implementation-defined.
0422デフォルトの名無しさん
2011/10/11(火) 19:58:56.25C++11の仕様書にはそんな文言は書かれてないんだが
0423デフォルトの名無しさん
2011/10/11(火) 20:07:08.68で、C++11
In general, the semantics of volatile are intended to be the same in C++ as the are in C.
0424デフォルトの名無しさん
2011/10/11(火) 20:17:13.77この手は、Cに倣えだからな。
0425デフォルトの名無しさん
2011/10/11(火) 20:19:24.37"In general"とか"intended to"の意味わかってる?
>416にもあるように、C++11では明示的に undefined behavior と書かれている。(1.10.21)
0426デフォルトの名無しさん
2011/10/11(火) 20:30:16.260427デフォルトの名無しさん
2011/10/11(火) 20:46:11.930428デフォルトの名無しさん
2011/10/11(火) 20:50:22.61それは undefined だろ
0429デフォルトの名無しさん
2011/10/11(火) 21:28:35.590430デフォルトの名無しさん
2011/10/12(水) 01:18:57.38それ C99 の規格じゃなくて rationale でしょ。ちゃんと区別してね。
0431デフォルトの名無しさん
2011/10/12(水) 01:45:34.40> C++11では明示的に undefined behavior と書かれている。(1.10.21)
ここはraceの話で、volatile関係ない。
raceとobservable behaviorを区別しろ。
0432デフォルトの名無しさん
2011/10/12(水) 01:47:31.03未定義の振る舞いになっちゃうんじゃないの?
0433デフォルトの名無しさん
2011/10/12(水) 01:53:00.20> でも同じ変数にアクセスする以上
> 未定義の振る舞いになっちゃうんじゃないの?
何が未定義になると考えたの?
0434デフォルトの名無しさん
2011/10/12(水) 01:55:24.15と書いてるから、何がっつーか、やった途端鼻から悪魔が出てくるんじゃないの?
0435デフォルトの名無しさん
2011/10/12(水) 02:13:01.91> ここはraceの話で、volatile関係ない。
そうだよ。data raceの条件にvolatileの有無は関係なく、
そしてdata raceの結果はundefined behaviorだ。
それが何か?
0436デフォルトの名無しさん
2011/10/12(水) 02:16:47.270437デフォルトの名無しさん
2011/10/12(水) 02:18:54.31> そしてdata raceの結果はundefined behaviorだ。
data raceの結果って何?
もっと具体的に言える?
0438デフォルトの名無しさん
2011/10/12(水) 03:01:01.85undefinedって書いてあるんだから、その通りに解釈すればいいじゃない。
0439デフォルトの名無しさん
2011/10/12(水) 03:26:20.940440デフォルトの名無しさん
2011/10/12(水) 07:15:46.19具体的に言える訳が無い
0441デフォルトの名無しさん
2011/10/12(水) 11:27:49.30他スレッドの書き込みが別のスレッドからobservableであることが保証されている。
そういうメモリモデルが採用されている。
APIは定義しないが、メモリモデルだけ定義しておいた。
GCと同じパターン。
そもそもAPIを定義してないのに、上のようなメモリモデルすら定義しないのなら、
規格がスレッドに言及する意味は全くない。
0442デフォルトの名無しさん
2011/10/12(水) 11:54:39.05> C++11ではatomic objectがvolatileであれば、
> 他スレッドの書き込みが別のスレッドからobservableであることが保証されている。
それはvolatileの有無に関係なく保証されてる。(1.10.25および29.3.13)
0443デフォルトの名無しさん
2011/10/12(水) 13:57:52.86APIも定義されてるでしょ。
memory_order_seq_cstとか。
0444デフォルトの名無しさん
2011/10/12(水) 18:30:13.17volatile だけだ書いてあるソースを書け。
0445デフォルトの名無しさん
2011/10/12(水) 18:32:24.70ここはC++11という規格のスレだよね。
0446デフォルトの名無しさん
2011/10/12(水) 20:38:25.530447デフォルトの名無しさん
2011/10/12(水) 21:15:54.20標準規格にAPIなんざ無いぞ。
0448デフォルトの名無しさん
2011/10/12(水) 22:27:30.02ん?
APIってのが「スレッド間のメモリ可視性に関わるAPI」のことだと思ったから、
それならメモリバリア指定とかがそうだよね、と言ってるんだが。
0449デフォルトの名無しさん
2011/10/12(水) 22:44:43.37C++の規格という一般的で汎用的なものにそんなものが混じり込んでるはずはない
0450デフォルトの名無しさん
2011/10/12(水) 22:55:15.58普通にあるでしょ、exit の概念とか
ファイル名が DD name なのか DSN なのかとか
0451デフォルトの名無しさん
2011/10/12(水) 23:13:06.51for 文について教えてくれないか・・・・
for 文の中に また for 文を作って 終わり記号(CでもVBでもなんでもいい)
を打ったんだけどさ。
中のfor文が1回 終わったあとに、外の forを1回まわすのは、
どうしたらいい・・・
外の for が一階終わった後に 中の for が 回数上限まで回って、
外のforに制御がわたるんだよ。
for i 1++ <10
i = hoge + 1
for J 1++ <10
J = hote + 1
next
next
みたいになっちゃってんだよ。これをどうしたらいい?
0452デフォルトの名無しさん
2011/10/12(水) 23:18:56.39ここはC++11の規格に関して語るスレ
VBの話ならVBのスレに行った方が良いよ
VB.NET質問スレ(Part37)
http://hibari.2ch.net/test/read.cgi/tech/1317448996/
0453デフォルトの名無しさん
2011/10/12(水) 23:21:15.020454デフォルトの名無しさん
2011/10/12(水) 23:37:58.37Java世代か?
C++以前のすげぇ初歩的な話だが、API(システムコール)ってのは、
OSやらミドルウェアと通信するために用意されてる最底辺の界面を言う。
APIの上位に築かれた関数群はAPIとは言わん。
ライブラリ関数を使わなくとも、外部システムとやりとりはできるが、
APIが存在しない場合は実質無理。APIをラップするライブラリ関数も作れない。
0455デフォルトの名無しさん
2011/10/12(水) 23:50:47.48別に最下層でないといけないわけではない
WebサービスAPIとか
iostreamもI/O用のAPIだよね
0456デフォルトの名無しさん
2011/10/13(木) 00:04:06.13それにWebサービスAPIは、それ以上上位の機能は提供しないだろ。
だがiostreamはAPIじゃねえ。
iostreamはWriteFile、ReadFile、read、writeとかのAPIに
乗っかってるただのライブラリ。
Javaなんかは、そもそもAPIが無いのにVMとのAPIと称して
ライブラリとAPIの境がグダグダになってるけどな。
0457デフォルトの名無しさん
2011/10/13(木) 00:12:50.65http://en.wikipedia.org/wiki/Application_programming_interface
0458デフォルトの名無しさん
2011/10/13(木) 00:15:37.32ありがとなー
スレさえわからなかったんだよー。
ただ、制御構文を覚えるのが目的で、
Cにも行きたいからさ。
とりあえずVBにいってみるよ。
0459デフォルトの名無しさん
2011/10/13(木) 00:17:27.490460デフォルトの名無しさん
2011/10/13(木) 00:17:51.600461デフォルトの名無しさん
2011/10/13(木) 00:24:25.000462デフォルトの名無しさん
2011/10/13(木) 00:28:23.06OSへのアクセス手段 = API
0463デフォルトの名無しさん
2011/10/13(木) 00:38:42.280464デフォルトの名無しさん
2011/10/13(木) 00:49:59.72カスタムattributeとか作れんのかね。関数がstatic変数を戻り値で返す場合、
参照で受け取ると警告出したりしたいんだけど。
0465デフォルトの名無しさん
2011/10/13(木) 01:10:41.01finalとか全部キーワード・・・とは微妙に違うけど、そんな感じのになっちゃったし
0466デフォルトの名無しさん
2011/10/13(木) 01:35:48.69何を修飾しているのかなどが曖昧であったり,コンパイラ間で差異ががあったりしたわけで,
そこの部分を統一して文法規則に組み入れたことだけでも十分に意味はあるのでは?
元々の proposal http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2761.pdf も
具体的な attribute の semantics に触れているのは10節においてだけで
ほとんどは attribute の syntax について議論しているわけで.
0467デフォルトの名無しさん
2011/10/13(木) 01:58:51.790468デフォルトの名無しさん
2011/10/14(金) 19:02:49.64ttp://tech.slashdot.org/story/11/10/13/0328230/dennis-ritchie-creator-of-c-programming-language-passed-away
0469デフォルトの名無しさん
2011/10/14(金) 21:09:29.820470デフォルトの名無しさん
2011/10/14(金) 21:11:03.55毛根は死んでるけど
0471デフォルトの名無しさん
2011/10/15(土) 00:38:06.58いくつ規格を重ねれば登場するんだろう?
完全抽象化Classを親に持つWrapperがあれば、
0階Tensorの実装がスゲェ楽になるのに。
0472デフォルトの名無しさん
2011/10/15(土) 10:01:52.470473デフォルトの名無しさん
2011/10/15(土) 10:50:49.060474デフォルトの名無しさん
2011/10/15(土) 11:47:26.45つまり「スケルトン」「バンパイア」「ゾンビ」と同様に死んでいるけど
死んでない厄介なキャラだ。日本では【死神】と言われる場合が多い。
0475デフォルトの名無しさん
2011/10/15(土) 16:14:35.860476デフォルトの名無しさん
2011/10/15(土) 16:17:41.41http://iphoneac.com/images/ff/ff113.jpg
0477デフォルトの名無しさん
2011/10/15(土) 16:56:16.86みたいな事書いてるんだけど、やっぱC++11本は英語で出版するみたいなことにはしないでおくれよ?
1万円くらいまでなら買う気だからさ。(´・ω・`)
0478デフォルトの名無しさん
2011/10/15(土) 17:02:05.06ほっとけば治るよ
0479デフォルトの名無しさん
2011/10/15(土) 17:24:39.89メイヤー先生のも結構いいし、増補版出すだろうし。
0481デフォルトの名無しさん
2011/10/16(日) 13:48:55.07行頭で揃ってないといじいじする
0482デフォルトの名無しさん
2011/10/16(日) 14:06:38.62出してもらわないと困る
C++11が出ると思って長い事C++本買ってないし
0483デフォルトの名無しさん
2011/10/16(日) 14:29:33.630484デフォルトの名無しさん
2011/10/16(日) 18:26:26.28こいつら欧米の技術ばかりをありがたがってパリサイ人の
解釈で得意になって想像力(あえて創造力とはいってない)
かけらもない糞ども全員死ね。
お前ら目障りなんだよ。さっさ消えろ
0485デフォルトの名無しさん
2011/10/16(日) 19:03:46.63だれか一行にまとめて。
0486デフォルトの名無しさん
2011/10/16(日) 19:16:08.470487デフォルトの名無しさん
2011/10/16(日) 19:35:37.81てめーができないことを人に言うな
0488デフォルトの名無しさん
2011/10/16(日) 19:43:57.51と明治政府も言っております
0489デフォルトの名無しさん
2011/10/16(日) 20:03:13.52今使ってるコンピュータがですね、欧米産のノイマン型コンピュータなのですよ。
その理論だと、そこから自作するの?
0490デフォルトの名無しさん
2011/10/16(日) 22:17:49.810491デフォルトの名無しさん
2011/10/16(日) 22:19:46.600492デフォルトの名無しさん
2011/10/16(日) 22:20:28.050493デフォルトの名無しさん
2011/10/16(日) 22:38:18.580494デフォルトの名無しさん
2011/10/16(日) 22:43:21.62政治的圧力で潰されたけど
0495デフォルトの名無しさん
2011/10/16(日) 22:52:37.57アメリカはあれだけ戦争してるのもエネルギーのためで
0496デフォルトの名無しさん
2011/10/17(月) 00:57:34.99英語がすばらしいとか連呼しているC++本作者がいると聞いて飛んできました
http://turezurebana2009.blog62.fc2.com/blog-entry-53.html
0497デフォルトの名無しさん
2011/10/17(月) 01:14:53.19前半はみんな興味ない話題だろうけど
後半に明治の時期に作られた新語「平和」の話がある
0498デフォルトの名無しさん
2011/10/17(月) 05:45:16.51本の虫の人のことなら、あれは古文至上主義だろ
英語はできて当たり前っつってるだけで(俺はそうは思わんけど)
ブログ読んでないのに言うなよ・・・
0499デフォルトの名無しさん
2011/10/17(月) 12:19:18.04ほう、おまえさんが使っているコンピュータが欧米の工場で生産されたロットなのか
そのことはプログラム言語の仕様とどう関係があるんだ?
0500デフォルトの名無しさん
2011/10/17(月) 12:54:45.37スレチ
http://hibari.2ch.net/test/read.cgi/tech/1179424842/
0501デフォルトの名無しさん
2011/10/18(火) 00:11:34.220502デフォルトの名無しさん
2011/10/18(火) 02:58:38.610503デフォルトの名無しさん
2011/10/18(火) 21:22:25.72あと5年位したらやっぱり03と同じような
安定版というかマイナーバージョン的な規格が出るんだろうか。
11への本格的な乗り換えはその頃だろうな。
0504デフォルトの名無しさん
2011/10/18(火) 21:25:04.26data()メンバ関数を追加しなかった03か
0505デフォルトの名無しさん
2011/10/18(火) 22:56:55.44ちょっと勘違いするくらいラムダ式を愛用していきたいよ・3・
あと、わりと便利に使えそうなローカル関数。
ローカルクラスのstatic関数より整理されてていい。
0506デフォルトの名無しさん
2011/10/18(火) 23:12:16.70ラムダ式をそれっぽく使う事は可能だな
0507デフォルトの名無しさん
2011/10/18(火) 23:28:29.94ほんとにシビアなら循環参照も確保解放順番も考える必要があるし
そこまで考えてるならなくても書けるよ
0508デフォルトの名無しさん
2011/10/18(火) 23:34:48.57unique_ptrや
0509デフォルトの名無しさん
2011/10/18(火) 23:47:14.72英語じゃないと伝えられないとか言っちゃう奴は理解力と論理構成力がイマイチなことが多い
ちょっと人より英語ができたくらいで俺って頭イイとか勘違っちゃうからこんなことになる
ニートにはニートの理由があるってことだな
高い授業料だと思ってあきらめたら?
0510デフォルトの名無しさん
2011/10/18(火) 23:51:59.990511デフォルトの名無しさん
2011/10/19(水) 02:28:34.51http://www.suri.cs.okayama-u.ac.jp/~niitsuma/real-life-bot/index.htm
0512デフォルトの名無しさん
2011/10/19(水) 06:09:50.51翻訳は常にクソとかいってるのはただの思考停止。
0513デフォルトの名無しさん
2011/10/19(水) 12:01:38.25// 初期値
std::atomic<int> a(0), b(0);
// Thread 1
a.store(1, std::memory_order_release);
// Thread 2
b.store(1, std::memory_order_release);
// Thread 3
int r1 = a.load(std::memory_order_acquire);
int r2 = b.load(std::memory_order_acquire);
// Thread 4
int r3 = b.load(std::memory_order_acquire);
int r4 = a.load(std::memory_order_acquire);
r1 == 1 && r2 == 0 && r3 == 1 && r4 == 0
という実行結果は起こり得る。
信じられない
全部並び替えてみたけどそんな結果になる組み合わせなんかなかったよ
0514デフォルトの名無しさん
2011/10/19(水) 13:02:55.64常にmemory_order_seq_cstだけ使え。
そうすりゃそんなこと考えなくて済む。
0515デフォルトの名無しさん
2011/10/19(水) 13:15:52.24嫌な事、つらい事から目を逸らしてなかったことにするのは日本人の悪い癖ですよ
0516デフォルトの名無しさん
2011/10/19(水) 18:48:41.80Thread 1/2での変更の結果はいつかはThread 3/4から見えるようになる。
ただしそれがいつかはわからないし、実際に処理が行われた順に見えるようになるわけでもない。
だから
a.store
b.store
(Thread 3でThread 1での変更結果が可視になる)
int r1 = a.load (== 1)
int r2 = b.load (== 0 Thread 2での変更結果はThread 3ではまだ不可視)
(Thread 3でThread 2での変更結果が可視になる)
(Thread 4でThread 2での変更結果が可視になる)
int r3 = b.load (== 1)
int r4 = a.load (== 0 Thread 1での変更結果はThread 4ではまだ不可視)
(Thread 4でThread 1での変更結果が可視になる)
ということは起こりえる。
0517デフォルトの名無しさん
2011/10/19(水) 20:38:41.59その可視性っていうのが謎なんですけど
store/loadは排他して主記憶に書きこむ主記憶から読み込むという命令なんじゃないですか?
a.storeが成立した時点でメモリにはa=1と書きこまれていて
その後ほかのスレがどんなタイミングで見ようがそのメモリは1であると思うんだけど…
ああ、量子力学の波動性と粒子性の話を初めて聞いたとき以来の混乱だ
0518デフォルトの名無しさん
2011/10/19(水) 20:41:56.91いつThread3/4がThread1/2より後に実行されると錯覚していた?
0519デフォルトの名無しさん
2011/10/19(水) 20:44:10.990520デフォルトの名無しさん
2011/10/19(水) 20:49:50.903/4が先でもいいけどどっちにしろr1 == 1 && r2 == 0 && r3 == 1 && r4 == 0にはならないのでは?
int r1 = a.load (== 1) <- この時点でThread1は完了
int r2 = b.load (== 0) <- まだThread2は終わっていない
つまりr1=1,r2=0になるにはThread1->2の順番でないとならない
int r3 = b.load (== 1) <- Thread2は完了、もしr1=1,r2=0を満たすにはすでにThread1も終わってるはず(∵↑)つまりメモリにはa=1,b=1が書きこまれている
int r4 = a.load (== 0) <- Thread1,2両方終わってるのにメモリを読み込んだ値が1にならない????
0521デフォルトの名無しさん
2011/10/19(水) 21:26:41.12> store/loadは排他して主記憶に書きこむ主記憶から読み込むという命令なんじゃないですか?
違う。排他なんかしない。あくまでatomicityを保証するだけだ。
NUMAとかでは、あるメモリアドレスに対する書き込みが
異なるコアからは別のタイミングで見える、
なんてことは普通にある。
0522デフォルトの名無しさん
2011/10/19(水) 22:06:15.03つまり、自分のカンよりも先人の知恵の方が上ってことなのよ^^
0523デフォルトの名無しさん
2011/10/20(木) 01:47:56.301. Thread3とThread4の間には何の関係もない
2. Thread3から見て、Thread1とThread2はどちらが先に実行されるかわからない
3. Thread4から見ても、Thread1とThread2はどちらが先に実行されるかわからない
>>520の「つまりr1=1,r2=0になるには……」というのはThread3,4それぞれが互いに関係なく、Thread1,2との関係の上で決定するので
Thread3から見たときにThread1->Thread2の順で
Thread4から見たときにThread2->Thread1の順になる
という処理系が存在しないということを規格は保証できない
0524デフォルトの名無しさん
2011/10/20(木) 02:56:59.28いやぁ〜日本語なんて意味ないわ〜やる気無くしちゃったなぁ〜
みんなボクくらいの英語力身につけるべきだよ(チラッチラッ
ってことだからな
テメーはミサワかとw
0525デフォルトの名無しさん
2011/10/20(木) 03:18:48.74英語の規格や文献を調べてそれをまとめるような時間が増えると、
参考文献だけ紹介して同じもの読ませた方が誤解の余地無いんじゃね?とか思うんだろ。
きっと今もどこかの外人がC++11の本を英語で書いていて、同時に
どこかの日本人がC++11の本を日本語で書きながら英語圏の動向を気にしてて、
今このスレではスレッド間のデータの可視性を気にしてる。
ブンガクだね!
0526デフォルトの名無しさん
2011/10/20(木) 07:11:22.12何が言いたいのか解らんからコテハン付けてくれ。
0527デフォルトの名無しさん
2011/10/20(木) 18:56:56.35schemeからc++0xの自動生成
返値をdecltypdeで推定させるようにした。
SICPのコードを変換するとdecltypdeの中にlambdaがどうしても入ってしまう
0528デフォルトの名無しさん
2011/10/20(木) 19:49:01.23そんな基地外みたいな動作するマシンがあるわけないだろ
お前の処理系壊れてるよ
0529デフォルトの名無しさん
2011/10/20(木) 20:09:34.110530デフォルトの名無しさん
2011/10/20(木) 20:47:05.030531デフォルトの名無しさん
2011/10/20(木) 21:11:41.630532デフォルトの名無しさん
2011/10/20(木) 21:23:02.32atomicさんの中身はほとんどこの類いだろう。
>>528の言う「気違いみたいな動作」しないのばかりだったのは、
cache coherence protocolでかっちり共有メモリの整合性保っていたいにしえの時代。
甘く見積もっても25年くらい前の話。
0533デフォルトの名無しさん
2011/10/20(木) 22:01:44.08誰が得するためにそんな事になってんだ
0534デフォルトの名無しさん
2011/10/20(木) 22:08:35.650535デフォルトの名無しさん
2011/10/20(木) 22:11:58.300536デフォルトの名無しさん
2011/10/20(木) 22:20:54.94一般には独立した概念では?
0537デフォルトの名無しさん
2011/10/20(木) 22:22:40.000538デフォルトの名無しさん
2011/10/20(木) 22:23:25.39どういう突っ込みなんだよ。
0539デフォルトの名無しさん
2011/10/20(木) 22:30:09.77ほかの人が言ってるようにNUMAの計算機はThread3,4がそれぞれThread1,2の実行順序を互いにあべこべに観測する可能性がある。まぁそれはおいといて、
「Thread3から見たときにThread1->Thread2の順で
Thread4から見たときにThread2->Thread1の順になる
という処理系が存在する」ということも規格は保証しないよ
もちろん、「俺が持ってる処理系がそうである」ということも規格は保証しない
>>533
得をするのは計算機のユーザーだよ
0540デフォルトの名無しさん
2011/10/20(木) 22:35:16.45オレのような底辺にはそれだけわかれば十分だよ。ループ制御とか簡単な部分はatomicで、それ以外は安全重視でmutex使うし
0541デフォルトの名無しさん
2011/10/20(木) 22:40:45.21いえ, lock-free/wait-free に関する話は
メモリオーダーに関する話を完全に脇に置いておいて
sequential consistency を前提にした上で議論できますし,
少なくとも lock-free/wait-free に関して最初に学ぶ段階では
実際そうすべきではないかと.
0542デフォルトの名無しさん
2011/10/20(木) 22:41:47.020543デフォルトの名無しさん
2011/10/20(木) 22:45:50.24付けてなかった限定を付けるタイプの詭弁ですね。
0544デフォルトの名無しさん
2011/10/20(木) 22:49:11.52(実際にメモリバリアかどうかはともかく)
メモリバリアに相当する機能を持つことは保証されます
0545デフォルトの名無しさん
2011/10/20(木) 22:56:12.35"write atomicity" でググれ。
海外のMLとかでも、未だにちょくちょく議論になることがある。
0546デフォルトの名無しさん
2011/10/20(木) 23:19:20.59わかったつもりで書いた不良コードが世界中で量産されそうだ
0547デフォルトの名無しさん
2011/10/20(木) 23:20:14.070548デフォルトの名無しさん
2011/10/21(金) 07:33:17.47気にしなくて良い
0549デフォルトの名無しさん
2011/10/21(金) 08:47:00.740550デフォルトの名無しさん
2011/10/21(金) 16:28:07.85その意見も、ある意味もっともだ。
そもそもseq_cst以外のメモリバリアの存在意義はパフォーマンスだけなので、
seq_cstのオーバーヘッドが十分小さくなればそれ以外は不要になる。
だから、そうなるようにCPUメーカーに働きかけようぜ、って言ってる標準委員会メンバーも居る。
0551デフォルトの名無しさん
2011/10/21(金) 19:28:59.050552デフォルトの名無しさん
2011/10/21(金) 19:38:41.230553デフォルトの名無しさん
2011/10/21(金) 21:35:10.680554186
2011/10/22(土) 09:43:30.71ハードとソフトは相互依存とは言うが、そのうち、CPUはC Processing Unitの略だと勘違いする奴が出て来そうだな。
0555デフォルトの名無しさん
2011/10/22(土) 09:48:18.55バグだらけになってC++はクソ言語って悪評がつくぞ
そしてみんなC系列にうんざりしてD言語に移動する
0556デフォルトの名無しさん
2011/10/22(土) 09:53:40.880557デフォルトの名無しさん
2011/10/22(土) 09:58:50.26>仕様に入れとけ
これ言う人って、自分では提案する勇気もスキルも無いけど、誰かがやってくれたら、俺が主張していた事だって自慢するのかな?
0558デフォルトの名無しさん
2011/10/22(土) 10:01:19.49ひねくれてんな
性格矯正おすすめするよ
0559デフォルトの名無しさん
2011/10/22(土) 15:52:12.69実装された処理系がほとんど登場しないと・・・
0560デフォルトの名無しさん
2011/10/22(土) 15:55:24.08constexprもrvalue関係もほぼ必須だし。
0561デフォルトの名無しさん
2011/10/22(土) 16:34:34.38まあVC11の実装は期待できないけど
0562デフォルトの名無しさん
2011/10/22(土) 21:15:26.97独自の文法を更に追加。
attributeとは何だったのか。
0563デフォルトの名無しさん
2011/10/22(土) 21:42:51.790564デフォルトの名無しさん
2011/10/22(土) 21:43:17.660565デフォルトの名無しさん
2011/10/22(土) 22:32:32.87MSの製品にするにはIDEごと対応表明せなあかんし
0566デフォルトの名無しさん
2011/10/23(日) 22:13:23.37アプリケーションはすべて仮想マシン上で動くものとし、
中間コードを優遇してネイティブコードを殲滅させるという
Microsoftの野望は潰えたの?
ネイティブコードが滅んだらC++なんて存在意義なくなっちゃうよねきっと。
おお、キッド。やぁ、マイケル。そんなことナイト2000。
0567デフォルトの名無しさん
2011/10/23(日) 22:17:21.360568デフォルトの名無しさん
2011/10/23(日) 22:21:59.560569デフォルトの名無しさん
2011/10/23(日) 22:22:49.080570デフォルトの名無しさん
2011/10/23(日) 22:27:04.110571デフォルトの名無しさん
2011/10/23(日) 22:27:46.470572デフォルトの名無しさん
2011/10/23(日) 22:29:30.47「Windowsにおいては」という限定をつけたらどうだろう?
セキュリティ強化のためにアプリケーションはすべて仮想マシン上でという
発想が本当に実現したとするなら、アンマネージドなコードを書けなくなるので
その環境ではC++の利点性は大幅に激安になると思いに蹴りな久かたに。
0573デフォルトの名無しさん
2011/10/23(日) 23:14:41.14使える仮想環境が一番多い言語は実の所C++だし。
.Netでも動けばLLVMでも動く。
仮想環境に乗るわけではないが、Java VM に接続し、
クラスライブラリを使うこともできる。
0574デフォルトの名無しさん
2011/10/23(日) 23:44:57.94マルチOS対応ならJavaが楽だ
C++は速度が必要なケースで生きのこる
0575デフォルトの名無しさん
2011/10/23(日) 23:49:20.57システムなんて、ほとんどのヤツが開発
したことないくせに、みんなエラそうだな。
0576デフォルトの名無しさん
2011/10/23(日) 23:59:50.81ワロス
0577デフォルトの名無しさん
2011/10/24(月) 00:00:09.38Java のライブラリ使って書けば?
C++のテンプレート使えると、生産性が違うぞ。
0578デフォルトの名無しさん
2011/10/24(月) 00:52:02.39まあVCは関係ないけど
0579デフォルトの名無しさん
2011/10/24(月) 03:15:55.260580デフォルトの名無しさん
2011/10/24(月) 10:08:42.18Singularityにおいては ならあり得る
あれはドライバも大半がC#で書かれてたし
0581デフォルトの名無しさん
2011/10/24(月) 19:53:32.77使ってっから言ってんだよ
0582デフォルトの名無しさん
2011/10/24(月) 23:12:48.12何だ、ただのユーザーか
開発しているわけでもないのに偉そうだな
0583デフォルトの名無しさん
2011/10/24(月) 23:13:06.590584デフォルトの名無しさん
2011/10/25(火) 00:55:32.97要求されてない奴はプログラマとは呼べない。
0585デフォルトの名無しさん
2011/10/25(火) 01:00:44.830586デフォルトの名無しさん
2011/10/25(火) 03:28:15.960587デフォルトの名無しさん
2011/10/25(火) 03:35:34.42ほとんどの場合だろ
今は体感できないけど、昔はオブジェクト指向は遅いって理由でCを使い続けるってのは良くあったらしい
0588デフォルトの名無しさん
2011/10/25(火) 03:38:57.71ちょうど今タイミングよくRaymond Chenが似たようなこと言ってるけど。
http://blogs.msdn.com/b/oldnewthing/archive/2011/10/24/10229097.aspx
0589デフォルトの名無しさん
2011/10/25(火) 03:59:35.70昔の話だ。
0590デフォルトの名無しさん
2011/10/25(火) 04:00:09.53C++よりCの方が早い、という意見はよく見かけるけど、単純な数値計算じゃなくて、C++のアルゴリズム相当のものを自作した場合でも成り立つんだろうか?
0591デフォルトの名無しさん
2011/10/25(火) 04:17:34.56単純な数値計算なら同じだろうし、C++の<algorithm>に明示的特殊化の可能性まで含めれば
Cより遅くなる理由は無い。
ところでスレ違いじゃないか?
0592デフォルトの名無しさん
2011/10/25(火) 04:18:32.48実行速度の話してなくね?
0593デフォルトの名無しさん
2011/10/25(火) 05:06:14.87あまり使われない関数を同じページに押しこむとかのトリックが、当時のC++コンパイラーではうまくできなかった。
もちろん、断っているように、規格じゃなくて実装の話。
0594デフォルトの名無しさん
2011/10/25(火) 05:29:05.93速度面だとケースバイケースじゃん。qsortよりstd::sortの方が速いし
0595デフォルトの名無しさん
2011/10/25(火) 06:36:06.47>qsortよりstd::sortの方が速いし
そりゃ、関数ポインタ経由のコールを乱発する qsort() よりもインラインで展開する std::qsort の方が速いに決まってます。
テンプレートをはじめとするインライン展開/メタプログラミングを活用するのなら C よりも早くなります。サイズもでかくなりますが。
0596デフォルトの名無しさん
2011/10/25(火) 07:38:13.37Cでもマクロ使えば良いだけだろ
0597デフォルトの名無しさん
2011/10/25(火) 08:11:51.850598デフォルトの名無しさん
2011/10/25(火) 08:16:17.640599デフォルトの名無しさん
2011/10/25(火) 08:23:45.07そういやなんでPreprocessor-Templateのqsortを標準化しなかったんだろうな
0600デフォルトの名無しさん
2011/10/25(火) 09:24:26.700601デフォルトの名無しさん
2011/10/25(火) 13:59:24.92比較にインライン関数や関数オブジェクトでなく関数ポインタを指定した場合でも std::sort()
の方が速いです
データの移動が発生する時、std::sort() は operator =() を呼び出すので CPU のワード長で
コピーが行われたりしますが、qsort() 内部のコピー関数はコピー対象のサイズをあらかじめ
知らないので (コンパイル済みなので) 最適化できず、qsort() 呼び出しで指定されたサイズ
をもとにループで 1 バイトずつコピーするからです
また、オブジェクトをコピーする場合に qsort() はコンストラクタやデストラクタを呼ばない
のでデータが壊滅するおそれもあるので、std::sort() を使いましょう
どうせ書くならここまで書け
0602デフォルトの名無しさん
2011/10/25(火) 18:39:27.46qsortの第三引数は何なんだよ
POD配列のソートならmemcpyを使うから大体qsortの方が早い
0603デフォルトの名無しさん
2011/10/25(火) 19:09:08.150604デフォルトの名無しさん
2011/10/25(火) 20:00:39.410605デフォルトの名無しさん
2011/10/25(火) 20:13:46.17それくらいコンパイラが最適化して欲しいな
0606デフォルトの名無しさん
2011/10/25(火) 20:16:23.39一要素のサイズが小さい→std::sort
こんな感じか
0607デフォルトの名無しさん
2011/10/25(火) 20:45:06.680608デフォルトの名無しさん
2011/10/25(火) 20:47:39.270609デフォルトの名無しさん
2011/10/25(火) 20:50:31.990610デフォルトの名無しさん
2011/10/25(火) 20:52:35.540611デフォルトの名無しさん
2011/10/25(火) 21:01:29.42・仮想関数と同時に同等のテンプレートを用意
この2点を守ってる限りじゃCより遅くなる事はないな。
Cでも同じ事をしようとすれば、同じアルゴリズムを
生成するコードを書かざるおえん。
0612デフォルトの名無しさん
2011/10/25(火) 21:03:44.700613デフォルトの名無しさん
2011/10/25(火) 22:26:38.570614デフォルトの名無しさん
2011/10/25(火) 22:32:31.49注意して書けばな...
むやみに new すると,
キャッシュやページテーブル意識して書いた C の半分以下ののスピード性能になる
0615デフォルトの名無しさん
2011/10/25(火) 22:48:06.83そりゃあ、ベクトルの演算程度ならかわいいもんよ。
だが、行列乗算を式テンプレートでコーディングすると呪文の世界が。
それに100×100の行列乗算をやると、いつコンパイルが終わるかわからん。
面白いけど、意外と使い道のないテクニックだと思う。
0616デフォルトの名無しさん
2011/10/26(水) 00:40:11.02Blits++とかublasとかおとなしく使えばいい。
0617デフォルトの名無しさん
2011/10/26(水) 00:43:12.33newなんてそれほど使わなくないか?
大抵自動変数かコンテナで済むだろ。
0618デフォルトの名無しさん
2011/10/26(水) 00:52:50.10int main() {
using namespace std;
[](){ std::cout; }
}
のように、ラムダ式内のcoutにはstd::修飾が必要になるんですが
これはラムダ式の本文内のスコープがmain関数の内側にないってことですよね?
じゃあどこにあるんでしょう。ほわわん。
0619デフォルトの名無しさん
2011/10/26(水) 01:07:09.29ttp://ideone.com/OFro6
includeしてないとかそういうオチか?
0620デフォルトの名無しさん
2011/10/26(水) 01:38:26.200621デフォルトの名無しさん
2011/10/26(水) 02:08:04.64くそVisual C++2010のくそ仕様なんでしょうか…
0622デフォルトの名無しさん
2011/10/26(水) 04:08:59.16くそに謝れ
0623デフォルトの名無しさん
2011/10/26(水) 07:33:13.570624デフォルトの名無しさん
2011/10/26(水) 12:18:21.90こいつは何を言っているんだ?
そもそも>>618でコンパイルエラーなんだが
0625デフォルトの名無しさん
2011/10/26(水) 17:32:43.90以下のようにすると「定義されていない識別子です」と出た。
http://ideone.com/TkIjz
(打ち込み途中で setw を削ったので iomanip ヘッダは余計だった;;)
VCはC++11だけでなくテンプレートの準拠度も低いので
それでエラーになっているような気がする。
ちなみに「拡張子を無効にする」 /Za オプションつけてもだめだった。。
0626デフォルトの名無しさん
2011/10/28(金) 12:54:58.890627デフォルトの名無しさん
2011/10/28(金) 22:31:34.47またVC6,0の悲劇を繰り返す気か。
0628デフォルトの名無しさん
2011/10/28(金) 23:14:48.330629デフォルトの名無しさん
2011/10/28(金) 23:54:39.18クラシックモードがあれば移行の時間稼ぎは出来る。
0630デフォルトの名無しさん
2011/10/29(土) 00:44:39.960631デフォルトの名無しさん
2011/10/29(土) 08:04:11.41gccは頻繁に更新あるけど
VCはそんなのないだろ
0632使ってないからどうでもいいが、
2011/10/30(日) 10:50:06.17MS内のdev系が全部引き摺られてアップデイトしていくわけだし、
WG21のスケジュールに合わせてられないでしょ。
0633デフォルトの名無しさん
2011/10/30(日) 11:01:35.13デフォルトで中途半端なC++11が使えるのはよろしくない
gccでも-std=c++0xないと使えないってのに
0634デフォルトの名無しさん
2011/10/30(日) 13:26:30.85英語で読むなら他に選択肢はあるしな。
0635デフォルトの名無しさん
2011/10/30(日) 17:53:01.69プログラマなんて底辺職業、やってない
0636デフォルトの名無しさん
2011/10/30(日) 17:55:03.14コンパイラのエラーメッセージすら読めないバカとかたまにいるからな
0637デフォルトの名無しさん
2011/10/30(日) 17:56:55.28コンパイルエラーぐらい、日本語で表示されるだろ。
0638デフォルトの名無しさん
2011/10/30(日) 18:19:05.72あれ読んでる奴いるのか?
クリックしてジャンプしてるだけだろ?
0639デフォルトの名無しさん
2011/10/30(日) 18:41:23.45じゃあ英国人や米国人は全員セレブか
じゃあGoogleやMicrosoftのプログラマは底辺か
おまえが底辺なだけ。
0640デフォルトの名無しさん
2011/10/30(日) 19:08:10.12涙拭けよ
0641デフォルトの名無しさん
2011/10/30(日) 19:16:56.74さすがにそれはない
すぐ分かるエラーならともかく
0642デフォルトの名無しさん
2011/10/30(日) 19:22:20.82エラークリックして、何がエラーかわからんときはエラーメッセージ読むなぁ。
0643デフォルトの名無しさん
2011/10/30(日) 19:38:22.85くだらん書き込みでageるなカス
0644デフォルトの名無しさん
2011/10/30(日) 21:09:33.77くだらん書き込みはお前のだ。
0645デフォルトの名無しさん
2011/10/30(日) 22:57:33.240646デフォルトの名無しさん
2011/10/31(月) 13:19:58.280647デフォルトの名無しさん
2011/10/31(月) 14:20:40.75時既に遅しっぽいけど
0648デフォルトの名無しさん
2011/10/31(月) 17:53:49.73int a; //const
const int b; //const
mutable int c; //non-const
}
うん、ないな
0649デフォルトの名無しさん
2011/10/31(月) 21:56:25.830650デフォルトの名無しさん
2011/10/31(月) 22:58:59.340651デフォルトの名無しさん
2011/10/31(月) 23:10:23.330652デフォルトの名無しさん
2011/10/31(月) 23:12:44.580653デフォルトの名無しさん
2011/10/31(月) 23:17:44.36HTMLのCSS様にc++のヘッダ・ソースコードとは離れた言語外定義ファイル方式にして
「どうしてもイジリたい奴だけイジれ」みたいな
とにかく面倒じゃないやりかたにして欲しいね
0654デフォルトの名無しさん
2011/10/31(月) 23:45:13.000655デフォルトの名無しさん
2011/11/01(火) 22:45:03.920656デフォルトの名無しさん
2011/11/01(火) 23:01:47.970657デフォルトの名無しさん
2011/11/01(火) 23:13:57.11とか定義すんのか。何の意味があるんだキモイだけだろ。
0658デフォルトの名無しさん
2011/11/01(火) 23:50:04.050659デフォルトの名無しさん
2011/11/02(水) 01:58:56.150660デフォルトの名無しさん
2011/11/04(金) 19:23:31.120661デフォルトの名無しさん
2011/11/04(金) 19:59:06.820662デフォルトの名無しさん
2011/11/04(金) 20:10:57.67構文規則の複雑さを理解したという感情からくるものだと思うけどな。
0663デフォルトの名無しさん
2011/11/04(金) 20:14:34.12そういう意味ではperlとかのほうがよっぽどキモいわ
0664デフォルトの名無しさん
2011/11/04(金) 20:44:21.57C++は頑張れば頑張っただけキモくなるし天井知らずでオエッてくるコードが書ける利点がある
0665デフォルトの名無しさん
2011/11/04(金) 22:17:24.250666デフォルトの名無しさん
2011/11/04(金) 22:57:30.240667デフォルトの名無しさん
2011/11/04(金) 23:03:33.050668デフォルトの名無しさん
2011/11/04(金) 23:34:11.66template<class T> class X {
if(is_pointer(T)) typedef remove_pointer(T) value_type ;
else typedef T value_type ;
private:
value_type v_ ;
...
みたいな
0669デフォルトの名無しさん
2011/11/04(金) 23:34:15.500670デフォルトの名無しさん
2011/11/04(金) 23:34:31.980671デフォルトの名無しさん
2011/11/04(金) 23:41:18.850672デフォルトの名無しさん
2011/11/04(金) 23:42:53.75型の計算できんの?
0673デフォルトの名無しさん
2011/11/05(土) 14:14:54.49どうなったか、ご存知の方います?
最後まで揺れていたみたいだけど、どういう条件で
暗黙に作られたり、作られなかったりするんだろ
コピーコンストラクタ・コピー代入演算子との兼ね合いはどうなんでしょうか
0674デフォルトの名無しさん
2011/11/05(土) 14:20:18.76ユーザー定義のコピーがあれば暗黙のムーブは生成されない。
ちなみに、ユーザー定義のムーブがあれば、暗黙のコピーは生成されるが、この挙動はdeprecatedになった。
つまり頼るなってことだ。
0675デフォルトの名無しさん
2011/11/05(土) 14:36:42.660676デフォルトの名無しさん
2011/11/05(土) 14:53:30.750677デフォルトの名無しさん
2011/11/05(土) 15:23:58.310678デフォルトの名無しさん
2011/11/05(土) 15:39:31.81チンタラと「自分で調べる気」になっていつまでも調べられない愚図はいらない。
0679デフォルトの名無しさん
2011/11/05(土) 15:42:09.58質問待ってるんだろ、素直になれよ
0680デフォルトの名無しさん
2011/11/05(土) 17:10:35.68あせってやるほどのことでもないし
0681デフォルトの名無しさん
2011/11/05(土) 18:34:01.25そこは認めたうえで殴り合ってください
0682デフォルトの名無しさん
2011/11/05(土) 19:06:54.900683デフォルトの名無しさん
2011/11/05(土) 19:08:22.050684デフォルトの名無しさん
2011/11/05(土) 19:28:41.160685デフォルトの名無しさん
2011/11/05(土) 20:32:08.22なるほどね
0686デフォルトの名無しさん
2011/11/05(土) 20:46:31.370687デフォルトの名無しさん
2011/11/05(土) 21:12:15.72型が分かりにくくなる
型が大体想像できるイテレータとか
そういうのに限らないと読めたもんじゃないと思う
0688デフォルトの名無しさん
2011/11/05(土) 21:27:25.650689デフォルトの名無しさん
2011/11/05(土) 21:29:08.07汎整数昇格やら何やら細かい規則があってややこしいんだぜ
0690デフォルトの名無しさん
2011/11/05(土) 21:36:02.25いやいや
0691デフォルトの名無しさん
2011/11/05(土) 21:36:39.910692デフォルトの名無しさん
2011/11/05(土) 22:23:08.72これやるくらいならJava使ったほうがよくね?
0693デフォルトの名無しさん
2011/11/05(土) 22:30:06.530694デフォルトの名無しさん
2011/11/05(土) 22:41:03.52ほとんどのイカしたC++プログラマはJavaレベルのメモリ管理なんて屁でもないけど
ほとんどのイカれたC++プログラマはまともにメモリ管理できないから。
0695デフォルトの名無しさん
2011/11/05(土) 22:56:35.440696デフォルトの名無しさん
2011/11/06(日) 01:24:42.34サッターさん涙目w
0697デフォルトの名無しさん
2011/11/06(日) 10:45:47.49Javaを使った方がいい場面なら勝手に使えばいい
スマポ使うことを「これくらいやる」とか言ってる時点でおかしいだろ
生ポを正しく使う方が難しい。というかミスを防げないんだから
0698デフォルトの名無しさん
2011/11/06(日) 11:02:04.280699デフォルトの名無しさん
2011/11/06(日) 11:06:45.44知的障害の有るメンバが混じってるプロジェクト以外でスマポの循環が問題になったなんて事例は
いままで世界で一度も発生してないという事実を認識しろ
0700デフォルトの名無しさん
2011/11/06(日) 11:34:36.03優先すべきはunique_ptr。共有したいときにshared_ptrの出番。
循環参照のためにweak_ptrもあるし。
というか生ポとの比較関係ねぇしw
0701デフォルトの名無しさん
2011/11/06(日) 11:43:20.990702デフォルトの名無しさん
2011/11/06(日) 11:45:45.450703デフォルトの名無しさん
2011/11/06(日) 11:57:46.16COM使ってて循環参照や生ポで受けてリークしてる例は何度も見てる
スマポ知らない人がスマポ使われてるプロジェクトに投入されるとよくある事
0704デフォルトの名無しさん
2011/11/06(日) 13:03:47.09OOPLで型が目に見えなきゃならん理由が解からん。
OOの概念からすりゃ型を意識しなきゃいけないのは悪だ。
型チェックは別に型が目に見えなくてもできる。
大体、テンプレートだって実際どの型が割り当てられるかなんて気にせず書いてる。
0705デフォルトの名無しさん
2011/11/06(日) 13:14:18.13Dart(笑)でもやってろよ
C++の利点は静的型と生ポを扱えることなのに、それを否定してるだけに見える
0706デフォルトの名無しさん
2011/11/06(日) 13:39:40.59こいつ最高にアホ
0707デフォルトの名無しさん
2011/11/06(日) 13:39:58.98結局似たようなこと言ってんのに字面の違いで言い合いするなんて不毛だ。
0708デフォルトの名無しさん
2011/11/06(日) 13:48:21.08動的型言語じゃ型チェックできないだろバカじゃねぇの
目でみえることと、型安全は別
0709デフォルトの名無しさん
2011/11/06(日) 13:48:58.77JavaScriptとかと比べてできないことってあとなにがあるんだったっけ?
まあevalで実行時にソース評価とかはできないか・・
0710デフォルトの名無しさん
2011/11/06(日) 13:59:26.110711デフォルトの名無しさん
2011/11/06(日) 14:02:15.37autoを濫用すると「あれ? この値こいつに入れられるのか?」とか分かりにくくなる
0712デフォルトの名無しさん
2011/11/06(日) 14:05:49.260713デフォルトの名無しさん
2011/11/06(日) 14:06:02.61C系列の原則だろ
0714デフォルトの名無しさん
2011/11/06(日) 14:43:22.550715デフォルトの名無しさん
2011/11/06(日) 14:46:38.190716デフォルトの名無しさん
2011/11/06(日) 14:51:03.030717デフォルトの名無しさん
2011/11/06(日) 14:56:27.78でも、もう一度聞くぞ?
ここで聞くことか?
0718デフォルトの名無しさん
2011/11/06(日) 14:58:02.92別に消えてないし、コンパイル時に決定してるから動的とは言わないだろ
0719デフォルトの名無しさん
2011/11/06(日) 15:31:52.40コンパイルエラーなり、エディタの補助ですぐ解るがな。
0720デフォルトの名無しさん
2011/11/06(日) 15:35:11.07関数をthisのマップに自動で詰め込む。
this["関数名"](・・・);で、いつでもスコープに所属する関数を呼び出せる。
C++もOSの力とマングリング関数を使えば完全に不可能でもないけどね。
0721デフォルトの名無しさん
2011/11/06(日) 15:39:56.53ここで聞くこと
0722デフォルトの名無しさん
2011/11/06(日) 15:40:37.19マンドクセ
0723デフォルトの名無しさん
2011/11/06(日) 16:08:32.23そうか、C#スレで聞くよりも回答確率は大分低いだろうが、まあガンガレ
0724デフォルトの名無しさん
2011/11/06(日) 17:07:36.24型推論による型特定/明示的型指定
この2つの軸を混同している人がいるね。
0725デフォルトの名無しさん
2011/11/06(日) 17:12:08.33ああそうね。メンバ関数の実行時追加とかは無理か
0726デフォルトの名無しさん
2011/11/06(日) 17:12:49.89消えてるよ
静的型でラップしてるから消えてないように見えるだけ
0727デフォルトの名無しさん
2011/11/06(日) 17:45:50.860728デフォルトの名無しさん
2011/11/06(日) 18:06:27.60struct A : X {};
struct B : X {};
X * p = new A;
これだけでもうpから静的な型情報を取り出せないよanyも同じ
0729デフォルトの名無しさん
2011/11/06(日) 18:07:54.25少なくとも動的ではないな。
動的言語なら実行時に無視なり、エラーになる。
id object;
object = @"message";
[object isEqualToString: @"message"];
object = [ [NSError alloc] new ];
[object isEqualToString: @"message"];//無視
0730デフォルトの名無しさん
2011/11/06(日) 18:09:01.880731デフォルトの名無しさん
2011/11/06(日) 18:29:24.88anyは代入した型の型情報を保持してるでしょ
0732デフォルトの名無しさん
2011/11/06(日) 18:54:31.31> alloc] new ];
酷いねコレ
0733デフォルトの名無しさん
2011/11/06(日) 19:25:33.07動的にな
0734デフォルトの名無しさん
2011/11/06(日) 19:25:52.50initだわ間違えた。
0735デフォルトの名無しさん
2011/11/07(月) 03:42:48.98コンパイル時じゃね?
0736デフォルトの名無しさん
2011/11/07(月) 08:07:57.520737デフォルトの名無しさん
2011/11/07(月) 08:15:08.800738デフォルトの名無しさん
2011/11/07(月) 10:01:44.70ちげーよ
出来るってんならanyからコンパイル時に元の形を得るメタ関数作ってみろや
0739デフォルトの名無しさん
2011/11/07(月) 12:04:51.43どちらも正解と言える
0740デフォルトの名無しさん
2011/11/07(月) 17:01:42.36メタ関数を普通の関数と同じように書けるようにしてほしいなぁ。
typename add_const(typename T)
{
return const T;
}
typename remove_const(const typename T)
{
return T;
}
constexprができたんだから、typenameだってできるだろう。
0741デフォルトの名無しさん
2011/11/07(月) 17:12:21.06置き換えてみればわかるけどautoで意味がわからなくなるようなら設計が悪い
0742デフォルトの名無しさん
2011/11/07(月) 17:21:46.51auto信者の言ってることはこういうマヌケなことと本質的に同じだと気がついてくれ
0743デフォルトの名無しさん
2011/11/07(月) 17:27:38.23悪いスタイルで書けることを、必要以上に恐れないのがC系言語の設計。
0744デフォルトの名無しさん
2011/11/07(月) 17:39:04.02「別にそうでもないなー」ってところでは型推論に任せてる
0745デフォルトの名無しさん
2011/11/07(月) 17:55:01.21class foo {};
class bar : public foo {};
bar func() ;
auto x = func(); // Good!
foo y = func(); // 実はbarとfooを間違えているのたけど警告すらでない!世界は崩壊する!
0746デフォルトの名無しさん
2011/11/07(月) 18:15:28.90俺はJavaを使うようなスタイルでC++を使っている
0747デフォルトの名無しさん
2011/11/07(月) 19:13:47.270748デフォルトの名無しさん
2011/11/07(月) 19:18:35.720749デフォルトの名無しさん
2011/11/07(月) 19:46:24.85基底クラスの存在感が希薄なクラスくらいならあるかもしれない
0750デフォルトの名無しさん
2011/11/07(月) 19:49:20.50数値様クラスくらいならいいけども、
大抵複製考えるの面倒くさいか不可能なケースがほとんどで
0751デフォルトの名無しさん
2011/11/07(月) 20:04:21.65void hello(void);
};
struct hoge {
hoge(void) : p_(new hoge_()) {}
inline void hello(void) { p_->hello(); }
private:
SP<hoge_> p_;
};
めんどくさいから小さいクラスとボトルネック以外はこれでお茶を濁す
0752デフォルトの名無しさん
2011/11/07(月) 22:09:39.72違うと思うなぁ。極論を出して本質とは言わんで欲しい。
0753デフォルトの名無しさん
2011/11/07(月) 22:20:56.14TMPLやlambda使ってればautoは必要だと感じると思うようになる。
0754デフォルトの名無しさん
2011/11/07(月) 22:27:36.870755デフォルトの名無しさん
2011/11/07(月) 22:35:09.76現実の問題ってのはトレードオフの集合体。 こうすればすべて解決なんて方法は無い。
0756デフォルトの名無しさん
2011/11/07(月) 22:50:13.86間違ったロジックをかけばどこかで型の矛盾が生じてエラーになる。下手に不正確な型を書くと変なところでエラーが起きて解りにくくなる。
てか、autoの弊害が思い付かない
0757デフォルトの名無しさん
2011/11/07(月) 23:09:31.560758デフォルトの名無しさん
2011/11/08(火) 00:06:21.32anyはany_castが必要な時点で動的じゃねぇよ。
言うなりゃ片安全で多機能なvoid*。
//TypeAとTypeBは繋がりなし
boost::any any;
any = TypeA();
any->Function();
any = TypeB();
any->Function();
本当に動的型付ならダックタイプができなきゃならん。
動的片付けじゃないから、実行時に型情報から
関数情報のルックアップができない。
0759デフォルトの名無しさん
2011/11/08(火) 00:10:10.790760デフォルトの名無しさん
2011/11/08(火) 00:12:24.440761デフォルトの名無しさん
2011/11/08(火) 00:14:23.98void *だと実行時にメタ処理が走らないだろ。
コンパイル時にしているメタ処理が実行時に走るから動的っていうんだぞ。
お前の動的って何を根拠に言ってんだ?
0762デフォルトの名無しさん
2011/11/08(火) 00:15:51.550763デフォルトの名無しさん
2011/11/08(火) 00:20:37.110764デフォルトの名無しさん
2011/11/08(火) 00:22:21.620765デフォルトの名無しさん
2011/11/08(火) 00:23:44.44castしなきゃ正体が見えないだけで。castすりゃ動的言語ならCだって動的言語だわw
0766デフォルトの名無しさん
2011/11/08(火) 00:38:50.570767デフォルトの名無しさん
2011/11/08(火) 00:39:23.60そのレベルでこのスレ開いちゃいかんだろ、恐ろしいな・・・
0768デフォルトの名無しさん
2011/11/08(火) 00:42:28.75ちゃんと区別してないと話かみ合わないぞ
0769デフォルトの名無しさん
2011/11/08(火) 00:43:53.12レベルとか云々以前にコミュ障じゃね。
技術文書にも書かれてないオレオレ定義主張してんだから。
0770デフォルトの名無しさん
2011/11/08(火) 00:59:19.69anyはコンパイル時に型が決まる。だから静的。
void*に突っ込まれる型はコンパイル時には決まらない。だから動的。
恐らくお前はanyの動作を勘違いしている。
0771デフォルトの名無しさん
2011/11/08(火) 01:17:19.78静的型を持ってるなら簡単なことだろう?はやくしてくれ
0772デフォルトの名無しさん
2011/11/08(火) 01:21:37.53動的言語ではないので無理です。
0773デフォルトの名無しさん
2011/11/08(火) 01:27:56.47動的だって言うんなら、void *型からキャスト無しでメンバーにアクセスしたり、
四則演算ができたりする必要がある。動的型付けなら当然のように出来ること。
動的型付だと実行時にvoid *に当たるハンドルが実際の型情報を取り出し、
自動で演算子やメソッドを割り当てるからね。
0774デフォルトの名無しさん
2011/11/08(火) 01:31:52.940775デフォルトの名無しさん
2011/11/08(火) 01:50:38.34動的言語ってのは実行時に
型を定義できたりするアレだろ
if binding
require "module.m"
end
// bindingがfalseなら型未定義でエラー
Plugin.new()
0776デフォルトの名無しさん
2011/11/08(火) 01:50:51.04ごく初期、禿は懐疑的な態度で臨んだアレか
0777デフォルトの名無しさん
2011/11/08(火) 02:16:00.78型消去とかType Erasureで検索するよろし。
そういや昔boost::any用のマルチメソッド実装したなあ。便利だけど遅かった……
0778デフォルトの名無しさん
2011/11/08(火) 02:24:47.780779デフォルトの名無しさん
2011/11/08(火) 08:52:41.90これができないのは仕様ですか?
それともVS2010の仕様ですか?
void b(){}
void c(){}
auto a = true ? b : c;
これならできるのに、関数ポインタがラムダで置き換えできない。
0780デフォルトの名無しさん
2011/11/08(火) 09:37:04.870781デフォルトの名無しさん
2011/11/08(火) 11:51:30.55typeid(ValueType)
だよ。よってコンパイル時に決定してる。
0782デフォルトの名無しさん
2011/11/08(火) 12:21:27.290783デフォルトの名無しさん
2011/11/08(火) 12:54:34.730784デフォルトの名無しさん
2011/11/08(火) 13:10:03.22話が通じず困るのは本人なんだし。
0785デフォルトの名無しさん
2011/11/08(火) 15:33:42.28bool a = nullptr; // ok
boolさんがおかしい
0786デフォルトの名無しさん
2011/11/08(火) 17:27:00.94話通じてないのは静的厨だろwww
0787デフォルトの名無しさん
2011/11/08(火) 17:45:15.81lambdaの結果が同じ型にならなきゃエラーになるんじゃないの?
function でラップすれば良くないか?
0788デフォルトの名無しさん
2011/11/08(火) 18:01:08.62nullptrはnullptr_t型の値であり、nullptr_t型は任意のポインタ型に暗黙返還できて、ポインタ型はbool型に暗黙変換できる。
0789デフォルトの名無しさん
2011/11/08(火) 18:18:12.63ただしくは、nullptr_t型の値から直接bool型の値falseに変換できる。
0790デフォルトの名無しさん
2011/11/08(火) 19:41:07.33そんなこと出来ないほうが自然だ
0791デフォルトの名無しさん
2011/11/08(火) 20:26:39.690792デフォルトの名無しさん
2011/11/08(火) 20:31:59.70if(ptr == nullptr)って書いてる?
0793デフォルトの名無しさん
2011/11/08(火) 20:32:16.89まあいいか
0794デフォルトの名無しさん
2011/11/08(火) 20:33:29.65if(Ptr == nullptr)/*do*/
って書くかな。
0795デフォルトの名無しさん
2011/11/08(火) 20:44:40.14前者だな。有効/無効と解釈できるから
後者は間違えやすいから。c#だと後者しか書けなくてはまる
0796デフォルトの名無しさん
2011/11/08(火) 20:50:35.77ポインタとoptionalで同じように書きたいが
boost::optionalとnullptrの比較はなんかアレだ。
0797デフォルトの名無しさん
2011/11/08(火) 21:09:48.98テンプレート用。
0798デフォルトの名無しさん
2011/11/08(火) 21:24:43.05あらゆるラムダ式はお互いに型が違ってて(たとえ定義の形が同じでも)、暗黙変換も出来ないから仕様
0799デフォルトの名無しさん
2011/11/08(火) 21:27:47.13それはNULLでしょって話
nullptrというキーワードを新設したのになんでこんなことやったんだか
0800794
2011/11/08(火) 21:31:13.53まー、杞憂なんだろうけど。
0801デフォルトの名無しさん
2011/11/08(火) 21:32:30.01NULLの定義を見てごらん
整数の0と明確に区別出来るようになったでしょ。
0802デフォルトの名無しさん
2011/11/08(火) 21:34:17.36前者でも問題ないね
0803デフォルトの名無しさん
2011/11/08(火) 21:53:40.210804デフォルトの名無しさん
2011/11/08(火) 21:57:50.500806デフォルトの名無しさん
2011/11/08(火) 22:22:10.65なんでstd空間に定義してるのに _t ついてんだろうな。
型だけならnullpointerで良かったろうに。
あと本体もstd::nullptrじゃなくstd::nullじゃダメだったんだろか.。
0807デフォルトの名無しさん
2011/11/09(水) 00:03:47.93ググったら nullptr なんて名前使ってるやつほとんどいないし短いからこれでいいや
型名は typedef decltype(nullptr) nullptr_t; ってことで _t 付けとけばいいな
そんなかんじ
0808デフォルトの名無しさん
2011/11/09(水) 00:08:52.640809デフォルトの名無しさん
2011/11/09(水) 01:18:54.960810デフォルトの名無しさん
2011/11/09(水) 01:26:12.850811デフォルトの名無しさん
2011/11/09(水) 07:53:18.500812デフォルトの名無しさん
2011/11/09(水) 08:01:27.90ライブラリじゃなく予約語になったんだっけ?
0813デフォルトの名無しさん
2011/11/09(水) 08:36:54.89{
template<typename T>
operator T*() const
{
return 0;
}
} nullptr;
c+03で実装するとしたらこんな感じ?
0814デフォルトの名無しさん
2011/11/09(水) 08:40:35.04bool変換とか*とか->とか
0815デフォルトの名無しさん
2011/11/09(水) 09:23:22.93一応 nullptr イディオムはすでに存在する
ttp://ja.wikibooks.org/wiki/More_C%2B%2B_Idioms/nullptr
0816デフォルトの名無しさん
2011/11/09(水) 09:47:30.57operator boolはどう使うんだ?
if(nullptr)
とか?
void hoge(bool flag){}
hoge(nullptr);
とか?
falseを書く所に使うとしたら、間違った使い方としか思えないんだがw
NULLは (void*)0 ただし、他のどのポインタにも暗黙に変換できる
というCでの定義を考えると、*と->はイランのじゃないか?
0817デフォルトの名無しさん
2011/11/09(水) 12:19:24.74いらんな。nullptr自身はポインタ型ではないからな
0818デフォルトの名無しさん
2011/11/09(水) 22:43:02.41> if(nullptr)
言いたいことは分かるけど、こんなコードはないだろw
0819デフォルトの名無しさん
2011/11/10(木) 07:41:48.89マクロの出番だな。
0820デフォルトの名無しさん
2011/11/10(木) 11:56:09.66nullptrは定数なんだから、falseになるのは当たり前なんだし
最初っからfalseって書けよって話だと思うんだが
ほかにnullptrのbool変換が必要な理由があるのか?
0821デフォルトの名無しさん
2011/11/10(木) 12:30:52.06void function(Pointer p) {
if (p) {
}
}
0822デフォルトの名無しさん
2011/11/10(木) 19:01:06.69他のポインタではよく使う変換だしあえて禁止する理由なくね?
というような経緯だったと思う
0823デフォルトの名無しさん
2011/11/10(木) 19:57:33.220824デフォルトの名無しさん
2011/11/10(木) 20:02:45.390825デフォルトの名無しさん
2011/11/10(木) 20:32:09.160826デフォルトの名無しさん
2011/11/11(金) 09:12:08.62C++03のstructでoperator bool(){return false;}と
するより、最適化で消えてくれる可能性が高くなるのかな。
0827デフォルトの名無しさん
2011/11/11(金) 14:58:43.29auto int i = 0;
register auto j = 0;
return 0;
}
gcc-4.5.3 ./auto-auto-test.cpp
./auto-auto-test.cpp:4:15: error: ‘j’ does not name a type
gcc-4.5.3 -std=c++0x ./auto-auto-test.cpp
./auto-auto-test.cpp:3:10: error: two or more data types in declaration of ‘i’
旧autoキーワードそのものが消えたのか。
0828デフォルトの名無しさん
2011/11/11(金) 18:23:41.360829デフォルトの名無しさん
2011/11/12(土) 17:53:25.53何で、イチイチこだわらなくちゃいけないの?会社辞めたら?
数年後にここのスレに書き込んでいる奴の2〜3割が自殺。
0830デフォルトの名無しさん
2011/11/12(土) 18:07:08.76やんでるから病院言ってSIRIもらってこい
0831デフォルトの名無しさん
2011/11/12(土) 19:18:19.40ま、自殺しないようになw
0832デフォルトの名無しさん
2011/11/12(土) 19:24:33.450833デフォルトの名無しさん
2011/11/12(土) 19:31:04.48こういうやつ
(int[]){10, 20, 30};
0834デフォルトの名無しさん
2011/11/12(土) 19:32:55.710835デフォルトの名無しさん
2011/11/12(土) 19:39:34.67後者。真偽値はちゃんと区別したい。
0836デフォルトの名無しさん
2011/11/12(土) 19:44:59.31規格じゃなくてVCの拡張だよね
0837デフォルトの名無しさん
2011/11/12(土) 20:22:48.630838デフォルトの名無しさん
2011/11/12(土) 20:41:22.94あと、ググると別の明示的オーバーライドが出てくるから
誤解してるかもしれない。ここでいってるはこんなヤツ。
struct Derived:public Base1,public Base2
{
int Base1::Override(){}
int Base2::Override(){}
};
0839デフォルトの名無しさん
2011/11/12(土) 21:06:23.150840デフォルトの名無しさん
2011/11/12(土) 21:15:59.46compound literalというC99の規格だけどC++の規格ではない
0841デフォルトの名無しさん
2011/11/12(土) 21:19:14.21便利な規格は見送るんだよな標準委員会って馬鹿なんじゃね?
0842デフォルトの名無しさん
2011/11/12(土) 21:23:25.75Managed C++ 時代の名残だな
同様に for each が使える割には Range-based for がVC11でも実装されないらしい
0843デフォルトの名無しさん
2011/11/12(土) 21:26:50.910844デフォルトの名無しさん
2011/11/12(土) 21:27:58.320845デフォルトの名無しさん
2011/11/12(土) 21:29:38.67もう新規開発は期待してないんじゃないの?
自社の所有コードを保守できればいいみたいな。
0846デフォルトの名無しさん
2011/11/12(土) 21:43:10.580847デフォルトの名無しさん
2011/11/12(土) 22:39:39.93規格のポチをやるかどうかは気まぐれなんだよ
0848デフォルトの名無しさん
2011/11/12(土) 22:41:29.080849デフォルトの名無しさん
2011/11/12(土) 23:12:46.72最適化のレベルはどっちが上なのかな?
0850デフォルトの名無しさん
2011/11/12(土) 23:29:27.630851デフォルトの名無しさん
2011/11/12(土) 23:30:49.32DLLの中までインライン展開するしレジスタの使い分けやコードのならび換えが半端ない。
0852デフォルトの名無しさん
2011/11/12(土) 23:31:36.710853デフォルトの名無しさん
2011/11/12(土) 23:43:19.84DLL でインラインて、そんなに特殊なことか?
0854デフォルトの名無しさん
2011/11/12(土) 23:56:43.91Microsoftが必要としているのはWindowsとかの自分たちで用意した環境上でだけ動けば良いプログラムを作るための道具であって
C++でプログラムを作るための汎用的な道具ではないから。
0855デフォルトの名無しさん
2011/11/12(土) 23:58:35.54クロスプラットフォームなコンパイラじゃできないでしょ。
多分clangがWindowsに移植された場合もできないだろうし。
0856デフォルトの名無しさん
2011/11/13(日) 00:13:25.12え? え? クロスプラットフォーム??? 余計わけわかめ
0857デフォルトの名無しさん
2011/11/13(日) 00:13:57.610858デフォルトの名無しさん
2011/11/13(日) 00:28:48.76クロスコンパイル知ってる?
0859デフォルトの名無しさん
2011/11/13(日) 00:46:13.08WindowsとJavaぐらいじゃね。他のOSはUTF-8ベースだし、
Web関係のデータも大概UTF-8。DBもUTF-8サポート謳ってんのばっか。
XMLもUTF-16使ってんのは見たこと無いな。
0860デフォルトの名無しさん
2011/11/13(日) 00:52:10.18UTF-8は1バイトしか使わないコードページでは
実際1バイトのコストで文字処理できるから、
一番合理的だと個人的には思う。愛していきたい。
0861デフォルトの名無しさん
2011/11/13(日) 01:04:27.590862デフォルトの名無しさん
2011/11/13(日) 01:05:01.11x86もx64もいける
0863デフォルトの名無しさん
2011/11/13(日) 01:06:37.000864デフォルトの名無しさん
2011/11/13(日) 01:17:27.01Windowsでしか動かんがな
せめてPE以外を吐けるようになってから言え
0865デフォルトの名無しさん
2011/11/13(日) 01:18:27.24デフォルトは有るだろうけど
XMLは別にエンコード固定じゃないだろ
0866デフォルトの名無しさん
2011/11/13(日) 01:23:43.97デフォルトの話じゃないんだよなあ。
libxml2がUTF-8なんで正規のXMLパーサーを名乗れなかったりとかいろいろ
有ったんだけど。
0867デフォルトの名無しさん
2011/11/13(日) 01:25:37.69<?xml version="1.0" encoding="UTF-8"?>
0868デフォルトの名無しさん
2011/11/13(日) 01:28:54.44プログラム技術板なんだから、もう少し自分で調べるとかしなよ。
ほれ。
http://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-C74D1578
0869デフォルトの名無しさん
2011/11/13(日) 01:38:30.24Version 1.0
W3C Recommendation 1 October, 1998
http://www.w3.org/TR/REC-DOM-Level-1/cover.html
これってDOMの仕様じゃん
Extensible Markup Language (XML) 1.0 (Fifth Edition)
W3C Recommendation 26 November 2008
http://www.w3.org/TR/2008/REC-xml-20081126/#charencoding
XMLはこっち
XMLプロセッサはUTF-8とUTF-16の対応のみ求められるってさ。
> Each external parsed entity in an XML document may use a different encoding for its characters.
> All XML processors must be able to read entities in both the UTF-8 and UTF-16 encodings.
> The terms "UTF-8" and "UTF-16" in this specification do not apply to related character encodings,
> including but not limited to UTF-16BE, UTF-16LE, or CESU-8.
0870デフォルトの名無しさん
2011/11/13(日) 01:43:00.99もともとDOMの話だろ。
ほんとにめんどくさい人だなあ。
0871デフォルトの名無しさん
2011/11/13(日) 01:46:35.11ああそうなの。>>857 見て書いたから知らんかったわ。
0872デフォルトの名無しさん
2011/11/13(日) 01:48:22.86ああそうかい、とっても恥ずかしい>>865はお前じゃないわけね。
なおさら恥ずかしいやつだと思ったわ。
みっともないやつだなあ。
0873デフォルトの名無しさん
2011/11/13(日) 01:49:13.460874デフォルトの名無しさん
2011/11/13(日) 01:53:29.34これを見てDOMのエンコードについて話してると思う人は居ないと思うが・・・。
DOMがUTF-16向けだからXMLもUTF-16が仕様なんだと言いたいように見える。
0875デフォルトの名無しさん
2011/11/13(日) 01:54:52.06wchar_tかcharかと言えば、char。
理屈上別にintに突っ込んでも構わんけど。
0876デフォルトの名無しさん
2011/11/13(日) 01:57:49.61ありがとん。
char s[] = "UTF-8エンコードな文字列";
cout.imbue( locale( "Japanese_Japan.65001" ) );
cout << s;
みたいなんでいけるんかな、実験してみよう…。
0877デフォルトの名無しさん
2011/11/13(日) 01:58:17.760878デフォルトの名無しさん
2011/11/13(日) 02:03:10.950879デフォルトの名無しさん
2011/11/13(日) 02:04:38.84あれを見てDOMの話だと分かるやつはいない
0880デフォルトの名無しさん
2011/11/13(日) 02:08:06.790881デフォルトの名無しさん
2011/11/13(日) 02:27:58.820882デフォルトの名無しさん
2011/11/13(日) 02:46:27.11お前もXMLパーサー言っとるがな
0883デフォルトの名無しさん
2011/11/13(日) 02:49:24.73お前最悪だな
0885デフォルトの名無しさん
2011/11/13(日) 03:11:49.54このレスさえつけなきゃ皆スルーしてくれたのになァ
0886デフォルトの名無しさん
2011/11/13(日) 03:15:54.38これで墓穴掘ってるな
0887デフォルトの名無しさん
2011/11/13(日) 03:20:00.27どこにDOMの話が出てくるんだ?最悪だなお前
0888デフォルトの名無しさん
2011/11/13(日) 03:21:44.84お前フルボッコじゃねーか
みんなお前が悪いってよ
0889デフォルトの名無しさん
2011/11/13(日) 03:39:16.18オラオラ出てこいよ
0890デフォルトの名無しさん
2011/11/13(日) 05:18:06.280891デフォルトの名無しさん
2011/11/13(日) 05:42:07.870892デフォルトの名無しさん
2011/11/13(日) 06:00:31.24×SIRI
○SSRI
あまりきかないどころか凶暴化するという。個人的にはメチルフェニデートがお勧めだが‥‥‥。
0894デフォルトの名無しさん
2011/11/13(日) 09:03:37.45釣りだったんだからほっときゃ良かったのに。
0895デフォルトの名無しさん
2011/11/13(日) 09:05:18.26どうでもいいか。
0896デフォルトの名無しさん
2011/11/13(日) 09:53:01.56内部までUTF-8のOSなんてある?
ほとんどUTF-32だろ。
glibcは最初期からそうだし。
0897デフォルトの名無しさん
2011/11/13(日) 10:38:48.82お前>>863だろ
もう出てくるな
うざい
いまどきUTF-8じゃないOSなんてWindowsくれーだろ
あとしね
0898デフォルトの名無しさん
2011/11/13(日) 10:40:19.240899デフォルトの名無しさん
2011/11/13(日) 10:43:52.66狂ってると思います。
0901デフォルトの名無しさん
2011/11/13(日) 12:12:01.820902デフォルトの名無しさん
2011/11/13(日) 12:41:31.23UTF-8 =amd64
0903デフォルトの名無しさん
2011/11/13(日) 17:36:50.950904デフォルトの名無しさん
2011/11/13(日) 17:43:38.990905デフォルトの名無しさん
2011/11/13(日) 18:04:44.590906デフォルトの名無しさん
2011/11/13(日) 18:32:38.530907デフォルトの名無しさん
2011/11/13(日) 19:32:04.240908デフォルトの名無しさん
2011/11/13(日) 20:17:34.480909デフォルトの名無しさん
2011/11/13(日) 20:19:00.30大御所Plan9でさえ怪しいのに
0910デフォルトの名無しさん
2011/11/13(日) 20:21:03.04Plan9以降UNIXはUTF-8だし。
0911デフォルトの名無しさん
2011/11/13(日) 20:33:07.93UTF-16ってのは無いな。低水準APIがワイド文字使わないし。
http://developer.apple.com/library/mac/#documentation/CoreFoundation/Reference
/CFStringRef/Reference/reference.html
0912デフォルトの名無しさん
2011/11/13(日) 20:46:43.82中学生ですかあんた…。
これだからメンヘラはキモイって言われるんだ。
0913デフォルトの名無しさん
2011/11/13(日) 20:56:12.040914デフォルトの名無しさん
2011/11/13(日) 22:02:22.72当たり前でしょ、そんなこと! クロスコンパイルを知らないかって、そんな無礼な質問があるか!!
君はイエストシキイッソを知ってるか、そう聞かれたらどうするんだ君!
0915デフォルトの名無しさん
2011/11/13(日) 22:05:45.110916デフォルトの名無しさん
2011/11/13(日) 22:25:57.780917デフォルトの名無しさん
2011/11/14(月) 01:02:47.72それはパス名なんかの外部表現でしょ。
中はiconvベースだからUTF-32。
0918デフォルトの名無しさん
2011/11/14(月) 01:42:37.14CFStringは基本的にUTF-16(Mac OS X的にはUniChar)を
格納することを想定しているコンテナ。
他のものが格納されていても変換することはできるが。
その辺の事情はCFStringGetCharactersPtr等のドキュメントを読めば分かる。
iOSでプログラム書いた人間走ってることと思うが。
0919デフォルトの名無しさん
2011/11/14(月) 01:51:17.86いまどきUTF-16なんてM$だけだろ
0920デフォルトの名無しさん
2011/11/14(月) 02:02:48.51ICUで使ってる内部表現がそうだから
プログラム言語だとUTF-16が多数派では(実際にはUCS-2にしか対応していない
ものが多いかもしれないが)
0921デフォルトの名無しさん
2011/11/14(月) 02:23:03.17土方には必要ないんで。
0922デフォルトの名無しさん
2011/11/14(月) 05:20:50.110923デフォルトの名無しさん
2011/11/14(月) 05:37:39.54文字をすべて収納できる整数としか規定されていないな。
0924デフォルトの名無しさん
2011/11/14(月) 06:33:31.96>内部表現
>Windowsでは16ビット (UTF-16)、LinuxやMac OS Xでは32ビット (UTF-32)である
http://ja.wikipedia.org/wiki/UTF-8
>Mac OS Xで使用されるHFS+ファイルシステムでは、ファイル名をNFDに正規化されたUTF-8で扱う
どっちなんだい、まっ今ティッシュ^^
0925デフォルトの名無しさん
2011/11/14(月) 08:09:41.28それは事実。wchar _tが16なんて環境Windowsぐらいじゃね。
0926デフォルトの名無しさん
2011/11/14(月) 08:16:12.23興味があるから、カーネルのどの辺りのコードで変換してるか教えて。
カーネルソースをwchar_tでくぐってもそれらしいものが見つからなかった。
stringクラス的なものを構造体で作って管理してたりすんのかな。
0927デフォルトの名無しさん
2011/11/14(月) 08:32:32.140928デフォルトの名無しさん
2011/11/14(月) 08:38:20.660929デフォルトの名無しさん
2011/11/14(月) 09:36:15.94実装にかかわらずここは規格に沿ったC++のスレです
0930デフォルトの名無しさん
2011/11/14(月) 15:41:13.42せっかくchar16_tがやってきたんだし、typedef WCHAR くらいは char16_t のほうにしてほしい。
むりだろうなあ
0931デフォルトの名無しさん
2011/11/14(月) 17:25:52.14msがC++捨てるにはxp,vista,7を捨てる必要が有るから、あと10年は捨てられんでしょ
そしたら中古になったvs2011拾ってやるよ
0932デフォルトの名無しさん
2011/11/14(月) 17:28:56.860933デフォルトの名無しさん
2011/11/14(月) 19:29:20.68wchar_tとunicodeは、直接関係ないからね。
unicode使っててもwchar_t使わないケースはいくらでもある。
0934デフォルトの名無しさん
2011/11/14(月) 19:40:38.87合成文字と異体字セレクタがある時点で、UTF-32なwchar_tも規格違反だけどな!
wchar_tは「とにかく全ての文字を固定長で表現できるなにか」なんだから。
0935デフォルトの名無しさん
2011/11/14(月) 20:03:06.810936デフォルトの名無しさん
2011/11/14(月) 20:24:24.87今、妥当な使い方がUTF-16などっていうだけで。
0937デフォルトの名無しさん
2011/11/14(月) 20:31:36.480938デフォルトの名無しさん
2011/11/14(月) 20:32:52.210939デフォルトの名無しさん
2011/11/14(月) 20:37:31.25が定義されている場合はwchar_tの中身がunicodeということになるはず
0940デフォルトの名無しさん
2011/11/14(月) 20:40:31.810941デフォルトの名無しさん
2011/11/14(月) 21:05:44.98符号化文字集合はUCS-4、文字符号化方式はUTF-xと呼ぼうぢゃないか。
0942デフォルトの名無しさん
2011/11/15(火) 00:34:48.62固定長単位であつかうことがどうもうまくいかないっぽいから
もうUTF-8でいいんじゃないかって気もしないではないけど
専用の型や関数がない現状じゃめんどくさすぎるよな
0943デフォルトの名無しさん
2011/11/15(火) 00:38:55.920944デフォルトの名無しさん
2011/11/15(火) 00:47:08.470945デフォルトの名無しさん
2011/11/15(火) 01:07:13.20コンパイラで言えば仮対応してるだろ。
てか、タダなんだからためせ。
>>942
文字リテラルが一番の問題じゃね。
一回配列に突っ込んでしまえば、ダメ文字問題もないしそうそう困らないと思うけど。
0946デフォルトの名無しさん
2011/11/15(火) 01:12:28.05ロケールに従う従来のcharと、UTF-8なcharでオーバーロードができないって話じゃね?
0947デフォルトの名無しさん
2011/11/15(火) 01:46:22.97文字数カウントもまともに出来ないようじゃなあ
0948デフォルトの名無しさん
2011/11/15(火) 02:10:18.780949デフォルトの名無しさん
2011/11/15(火) 07:20:03.840950デフォルトの名無しさん
2011/11/15(火) 08:00:30.250951デフォルトの名無しさん
2011/11/15(火) 08:08:22.900952デフォルトの名無しさん
2011/11/15(火) 08:25:12.63parallel_for(0,10000000,[](int a){/*短い処理*/});
関数が短いとき、インラインになることが保証されてないと
関数呼び出しコストがバカにならないような。
0953デフォルトの名無しさん
2011/11/15(火) 08:29:20.721文字の途中で切れないようにするのに必要。
1024B容量あるとしても、1023バイト目は1バイト目で
切れてるとかは困るからね。とは言え複合文字のせいで
どのみち中途半端になるが。
0954デフォルトの名無しさん
2011/11/15(火) 08:32:10.61今までインライン展開が保証された事ないでしよ。
実装依存。
0955デフォルトの名無しさん
2011/11/15(火) 11:11:00.19UTF-8のときはmblenが合成文字やVSも含めた長さを返してくれれば……
でもそうすると切り出した一文字分をwchar_tに入れられない……
0956デフォルトの名無しさん
2011/11/15(火) 13:10:06.98こう考えれば済むだけの話だったんだよ。
0957デフォルトの名無しさん
2011/11/15(火) 13:34:21.31それで困らないということかもしれないが。
0958デフォルトの名無しさん
2011/11/15(火) 18:29:49.35万人にシアワセじゃねーのか。もうおじさんついてけないよ
0959デフォルトの名無しさん
2011/11/15(火) 19:19:14.77保証はともかく、inline指定したのと同じ効果になるかどうかだな
0960デフォルトの名無しさん
2011/11/15(火) 19:22:21.070961デフォルトの名無しさん
2011/11/15(火) 19:53:43.330962デフォルトの名無しさん
2011/11/15(火) 20:06:54.89C++ bindingもあるけど11じゃないからスレ違いだけどな。
0963デフォルトの名無しさん
2011/11/15(火) 20:10:19.12GUIそんなに辛いか?
Qtなんか使うと他の言語の方が面倒に感じる。
0964デフォルトの名無しさん
2011/11/15(火) 23:40:45.92オーサリングツールがないとやってられん
0965デフォルトの名無しさん
2011/11/16(水) 00:13:10.59コールバック可能な仕組み作るだけでも面倒だ。
0966デフォルトの名無しさん
2011/11/16(水) 00:23:52.470967デフォルトの名無しさん
2011/11/16(水) 00:28:49.660968デフォルトの名無しさん
2011/11/16(水) 00:32:24.32Nvidia’s OpenACC Standard | SemiAccurate
http://semiaccurate.com/2011/11/15/nvidias-openacc-standard/
0969デフォルトの名無しさん
2011/11/16(水) 00:33:02.81そんなん言ってるの非論理的な日本人だけじゃん。
海外サイトでLLっていったらCレベルの速度が言語の事。
0970デフォルトの名無しさん
2011/11/16(水) 00:39:35.35仕様的に安定して使えるのは2015年ぐらいか。
void sma_amp(int series_length, const float *series, float *moving_average, int window)
{
array_view<float> arr_in(series_length, series);
array_view<float> arr_out(series_length, moving_average);
parallel_for_each
(
grid<1>(extent<1>(series_length-(window-1))),
[=](index<1> idx) restrict(direct3d)
{
const int i = idx[0] + (window-1);
float sum = 0;
for (int j=i-(window-1); j<=i; i++)
sum += arr_in[j];
arr_out[i] = sum/window;
}
);
}
0971デフォルトの名無しさん
2011/11/16(水) 00:47:44.71以下のようなコードを書いたんだ。
ttp://ideone.com/n4aAH
で、見ればわかるがランダムなコードのファイルを吐くだけの単純なコードなんだけど、乱数の初期化部分にstdlibのrand使ってるんだよ。
これはある程度乱数をコントロールしてファイルを吐きたい意図があるわけなんだが、今の時代にこれはないだろうと思うのさ。
そこで、大喜利逝ってみよう。
どうすれば、意図に沿った上で今風になるか。
ちなみに開発環境はVC10EEだけど、俺が読めるコードだったらそれに限らない。
どうよ!!
0972デフォルトの名無しさん
2011/11/16(水) 00:49:07.55C++は結局Better C以上にはなり得ない。
0973デフォルトの名無しさん
2011/11/16(水) 00:50:13.30C++相談室でやれ。
0974デフォルトの名無しさん
2011/11/16(水) 00:50:46.12先ず、文章を今風にしてこい。
何年前の2ちゃんねるだよ。
0975デフォルトの名無しさん
2011/11/16(水) 00:58:36.27オーバーロードがまともに動かん。相変わらずのMSだ。
0976デフォルトの名無しさん
2011/11/16(水) 00:58:39.50うーん。ここの人だったら明快な答えくれると思ったんだけど。
ま、誘導ありがとう。
>>974
レートマジョリティよりも行動が遅い俺にはちょっと難しいぜ。
いてきまーす。
0977デフォルトの名無しさん
2011/11/16(水) 11:09:19.720978デフォルトの名無しさん
2011/11/16(水) 11:44:08.82vcじゃできないらしい…
0979デフォルトの名無しさん
2011/11/16(水) 12:47:47.140980デフォルトの名無しさん
2011/11/16(水) 12:57:30.880981デフォルトの名無しさん
2011/11/16(水) 13:01:39.120982デフォルトの名無しさん
2011/11/16(水) 17:29:33.14ワンクッション挟んで
ttp://ideone.com/6Acp1
0983デフォルトの名無しさん
2011/11/16(水) 19:02:36.750984デフォルトの名無しさん
2011/11/16(水) 19:04:49.220985デフォルトの名無しさん
2011/11/16(水) 19:34:31.59可変長引数テンプレートを使ったクラスで包めば出来る。
>>984
バカが重複スレ立てるからいるだろ。
0986デフォルトの名無しさん
2011/11/16(水) 20:42:54.230987デフォルトの名無しさん
2011/11/16(水) 21:19:53.62これからはC++0xって書くと、古い情報のように思われるかも
ttp://www.open-std.org/jtc1/sc22/wg21/
ttp://gcc.gnu.org/projects/cxx0x.html
C++11がいいと思う
0988デフォルトの名無しさん
2011/11/16(水) 22:20:15.940989デフォルトの名無しさん
2011/11/16(水) 22:26:24.470990デフォルトの名無しさん
2011/11/16(水) 22:34:13.880991デフォルトの名無しさん
2011/11/16(水) 23:08:35.140992デフォルトの名無しさん
2011/11/16(水) 23:17:17.49こっちはC++1xとか「次期C++標準」とか、そういうスレになるんじゃないの?
0993デフォルトの名無しさん
2011/11/16(水) 23:21:22.7498⇨03⇨11って流れだからな。
ネタがないって。
0994デフォルトの名無しさん
2011/11/16(水) 23:21:59.160995デフォルトの名無しさん
2011/11/16(水) 23:22:54.740996デフォルトの名無しさん
2011/11/16(水) 23:24:24.020997デフォルトの名無しさん
2011/11/16(水) 23:28:18.80C++11/C++0x 15
http://hibari.2ch.net/test/read.cgi/tech/1321453654/
0998デフォルトの名無しさん
2011/11/16(水) 23:34:19.32どうでもいいことで悩んで
0999デフォルトの名無しさん
2011/11/16(水) 23:55:19.911000デフォルトの名無しさん
2011/11/16(水) 23:55:38.7310011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。