1 :デフォルトの名無しさん2011/09/23(金) 15:56:01.00
4 :デフォルトの名無しさん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: : : : : :.\
7 :デフォルトの名無しさん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ノ
9 :デフォルトの名無しさん2011/09/24(土) 09:32:22.39
一度目は面白くてもネチネチ繰り返酢とキモチ悪いだけだ
忘れろてか絶対書くな
10 :デフォルトの名無しさん2011/09/24(土) 15:48:28.56
はやくVC++で可変長天ぷらつかいたいよう
スクリプトで似たようなオーバーロードたくさん生成する作業はもういやだお
11 :デフォルトの名無しさん2011/09/24(土) 15:52:32.87
GCCでもこの有様なのに

main.cpp:9:40: 残念ですが未実装です: cannot expand ‘ns ...’ into a fixed-length argument list
16 :デフォルトの名無しさん2011/09/24(土) 23:39:04.02
>>11
4.3から実装されてる。コード晒して。
18 :デフォルトの名無しさん2011/09/25(日) 00:16:31.39
>>16
#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;
}

もしかして、こういう風には使えないのか?
12 :デフォルトの名無しさん2011/09/24(土) 18:17:04.09
エクセルでたくさん生成すればいいだろ
結構楽々だぜ?
14 :デフォルトの名無しさん2011/09/24(土) 21:57:20.35
Win32 APIの動的ロードをするときにdecltypeが死ぬほど便利と知った
17 :デフォルトの名無しさん2011/09/24(土) 23:58:13.72
>>14
なぜ便利なのですか?
19 :デフォルトの名無しさん2011/09/25(日) 00:23:10.03
>>17
ヘルプを見なくても戻り値をなんとか受け取れます
15 :デフォルトの名無しさん2011/09/24(土) 22:12:38.60
今頃知ったが
decltypeって関数の戻り値の型も取り出せるのか
オラワクだな
21 :デフォルトの名無しさん2011/09/25(日) 01:19:09.37
学園はもう飽きたなら、今度はバーあたりどうかな

禿: マスター (いらっしゃいませ、ただいまメニューはこちらになっております
コンパウンドリテラルさん: いつも2人分の席にいらっしゃる貫禄
ホステス auto : 双子の妹? 姉妹仲が修復不能状態
ホスト concept: フェラーリでご出勤の稼ぎ頭・・・のはずだったが、入院または服役の噂。ゆっくり充電してね。
ホステス auto_ptr: 同伴が伸び悩み、若い子の面接でしょっぱい思いをしている低級管理職。
右辺値参照さん: 裏家業、別れさせ屋。カウンターではおとなしい。
ラッパー: その名のとおり一気のみして現在昏睡状態、禿の一言に深く傷ついた模様。
マルチスレッド先生: 新機軸だった持論が実は70年代とわかりストレス処理中。まわりが潤ういい荒れ方。
22 :デフォルトの名無しさん2011/09/25(日) 02:06:18.36
template(だけ)でコンパイル時計算ってのがすでに過去の遺物となりつつあるけどな。

constexpr 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;
}
25 :デフォルトの名無しさん2011/09/25(日) 02:53:32.95
>>22
すげえ
gcc4.6.1(MinGW)でコンパイルして走ってしまった
しかしEclipse CDTが対応してないらしくまだエラーだらけの画面

実行結果
6
1, 0, 0, 0, 0, 0, 0, 0, 0,
29 :デフォルトの名無しさん2011/09/25(日) 18:36:25.24
>>16
今のところ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で使ってるのは関数呼び出しからのテンプレート実引数推論であって上記とは別の機能。
24 :デフォルトの名無しさん2011/09/25(日) 02:30:42.28
constexprならいけるのか
そこら辺仕様なんだろうか?
28 :デフォルトの名無しさん2011/09/25(日) 17:30:02.05
規格定まったし、VC11がどのくらい準拠してくれるかねぇ
10と同じだったら嫌だ
30 :デフォルトの名無しさん2011/09/25(日) 18:45:15.09
>>28
ほぼ同じ
32 :デフォルトの名無しさん2011/09/25(日) 19:29:40.11
風と共に去りぬ



じゃなかった。。。



禿と共に去りぬ。ナンマイダ―w
34 :デフォルトの名無しさん2011/09/26(月) 04:51:23.18
gcc とllvmが実装してくれさえすればVSも後から実装してくれるんじゃないだろうか
36 :デフォルトの名無しさん2011/09/26(月) 10:49:20.01
C++11フル実装はclangが一番早いと思われる。
開発者がIndiana版conceptの中の人だから。
37 :デフォルトの名無しさん2011/09/26(月) 11:06:51.14
clangってlambda実装する気あんのかねぇ
39 :デフォルトの名無しさん2011/09/26(月) 11:51:34.97
>>37
基本的にマージされる方向。cfe-devにもよく登場する人。
http://www.google-melange.com/gsoc/proposal/review/google/gsoc2011/gigabytes/1
40 :デフォルトの名無しさん2011/09/26(月) 23:15:17.44
v3以降 脱GPLの流れが加速してるな
不自由を強いられるようなもんだからこうなるのも当然ではあるけど
41 :デフォルトの名無しさん2011/09/27(火) 21:58:53.13
lambdaのおかげでSmalltalkみたいな楽しいことができるようになったな。
Javaよりよっぽどオブジェクト指向言語らしく見える。

//オブジェクトによる分岐
( 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); } );
42 :デフォルトの名無しさん2011/09/27(火) 23:59:50.01
また変態言語とか言われるからその辺で
47 :デフォルトの名無しさん2011/09/28(水) 10:13:35.95
>>42
いまどきlambdaくらい他言語の人の方が理解あるだろ
51 :デフォルトの名無しさん2011/09/28(水) 16:33:36.87
>>47
確かに
関数オブジェクトをわざわざ別のクラスで定義しなければいけなかった
今までが異常だったとも言える
43 :デフォルトの名無しさん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); } );

44 :デフォルトの名無しさん2011/09/28(水) 00:31:34.22
今考えるとブロックをサポートせずbool型をオブジェクトにしなかったJavaってアホだな
45 :デフォルトの名無しさん2011/09/28(水) 00:39:33.45
gccのsequenceのサポートはバージョンいつからだろう
今の所ステータスNoになってるな
48 :デフォルトの名無しさん2011/09/28(水) 10:30:59.56
C++って基本的にネイティブコードを想像しながら書くのに使ってたんだが
こんなに仕様が大きくなったら追いつかないわ・・・
49 :デフォルトの名無しさん2011/09/28(水) 11:49:42.16
どうせboost使って楽しようとし始めた時点でわけわからなくなる
50 :デフォルトの名無しさん2011/09/28(水) 12:54:24.75
ネイティブコードから見れば逆にあまり変わってないような
的外れかもしれないが強いて挙げるならスレッドが仕様に含まれたのが大きいか
52 :デフォルトの名無しさん2011/09/28(水) 16:42:30.70
c++11の新要素のうち、どの辺がネイティブコード想像できない?
53 :デフォルトの名無しさん2011/09/28(水) 17:58:07.08
拡張for文だな
どこまで最適化してくれるもんなのやら
59 :デフォルトの名無しさん2011/09/29(木) 11:31:07.35
>>53
拡張じゃないforと何か変わりますか?
55 :デフォルトの名無しさん2011/09/28(水) 21:16:41.50
あんな擬似コードを馬鹿正直に実装するわけないじゃん
コードサイズがひどいことになる
60 :デフォルトの名無しさん2011/09/29(木) 13:04:46.65
正直JavaScriptの方が変態言語だと思うし、C++なんて平凡な言語だと思うわ
61 :デフォルトの名無しさん2011/09/29(木) 13:50:32.86
スレッド関連をまとめたサイトってないのでしょうか

std::packaged_task
ってグローバル変数もパックしてくれるの?

スレッドの中でグローバル変数参照しててグローバル変数を別スレッドで変更したらどうなるの?

62 :デフォルトの名無しさん2011/09/29(木) 14:06:43.95
>>61
mutexなりでガードするかatomic変数として宣言するかしないと、
data raceで未定義動作となる。
71 :デフォルトの名無しさん2011/10/02(日) 16:42:23.32
>>61
その前にスレッド間で広域変数なんて使うなよ。
グローバル変数が許されるのはI/O関係か割り込みかかメモリー関係ぐらい。
シグナルですらグローバル変数を回避できるのに。
73 :デフォルトの名無しさん2011/10/02(日) 17:38:03.07
>>71
volatileとか知らない人?
75 :デフォルトの名無しさん2011/10/02(日) 18:46:46.57
>>71
非同期 I/O も割り込みもスレッドなのをご存知ない?
そもそも「許される例」があるのに、そこまで感情的になるのは間違ってるって思わないのか
78 :デフォルトの名無しさん2011/10/02(日) 19:14:46.59
>>73
volatileになんの関係が?

>>75
構文上許されたからどうした。
スレッドには引数で渡すだろ。
92 :デフォルトの名無しさん2011/10/03(月) 00:56:14.33
>>78
↓はvolatile関係あるだろ

>>71
> シグナルですらグローバル変数を回避できるのに。
63 :デフォルトの名無しさん2011/09/29(木) 14:45:54.81
c++11のスレッドに

関数の再帰呼び出しでスタック積んでいって
途中で別スレッドに処理が移ったら
スタックの情報も別スレッドに移動してくれるとか

そんな便利機能を期待してたのだけど
全部指定しないとダメってことなのかな
64 :デフォルトの名無しさん2011/09/29(木) 15:04:58.35
>>63
領域としてのスタックを指してるならそんな動作は100%害悪にしかならない
便利機能とか思ってるなら今日はもう顔洗って寝ろ
65 :デフォルトの名無しさん2011/09/29(木) 15:45:26.54
>>63
> 途中で別スレッドに処理が移ったら

スレッドが「処理」の主体なのに「移る」の?
66 :デフォルトの名無しさん2011/09/29(木) 15:48:42.44
c++11のスレッドでschemeの継続を作ろうとしてるブログ見たものだから
ひょっとそんな便利機能あるのかと期待してしまった
72 :デフォルトの名無しさん2011/10/02(日) 17:05:52.54
public static Hoge hoge = new Hoge();

C#ではマルチスレッドでhogeに同時にアクセスしても、hogeの初期化は排他制御されるが
C++11で同様の事やる場合はどうなってるの?
76 :デフォルトの名無しさん2011/10/02(日) 18:59:31.29
いや、グローバル変数なんかそうそう使うもんじゃないってのは
一般的な話だと思うが
77 :デフォルトの名無しさん2011/10/02(日) 19:05:08.30
グローバルな存在があるのも一般的な話だろ
解こうとする問題と構造の一致しないモデルをなぜ強要するんだ
79 :デフォルトの名無しさん2011/10/02(日) 19:18:06.85
仕様上どうなるのって話にスタイル上やるなって話で返す奴はどこにでもいるな。
自分のわからない話からわかる話にしようとしてるだけだから無視するが宜しい。
81 :デフォルトの名無しさん2011/10/02(日) 19:29:42.87
JavaとかのvolatileとC++のvolatileの区別がつかないヤツがまだいるのか・・・
82 :デフォルトの名無しさん2011/10/02(日) 19:33:59.03
実は、マルチスレッドでvolatileはタブーなんだけどな。

>volatile: a multithreaded programmer's worst enemy.
ttp://thread.gmane.org/gmane.comp.lib.boost.devel/221929/focus=222849
VCの制作スタッフも語ってる
85 :デフォルトの名無しさん2011/10/02(日) 20:01:05.16
C++使っててフラグってのもどうよ。
ましてやC++11のスレで発言できるネタじゃなくね。
87 :デフォルトの名無しさん2011/10/02(日) 20:38:56.85
実は、マルチスレッドでvolatileはタブーなんだけどな。(キリッ
88 :デフォルトの名無しさん2011/10/02(日) 20:50:29.42
uyさんがログインしました
130 :uy2011/10/03(月) 17:22:47.75
>>88
ハァ>?
90 :デフォルトの名無しさん2011/10/02(日) 21:25:25.89
おかしいと思う所があるんならはっきり言えよ
お前の中だけで完結してるならチラシの裏にでも書いとけ
93 :デフォルトの名無しさん2011/10/03(月) 01:40:24.48
JavaやC#じゃねぇから関係ねぇよ

a = true;
a = false;

こんな風に連続して代入された場合、
1番目の代入が消えなくなる。他にも無駄な式が消えなくなる。
それから、レジスタではなくメモリーに値を取るようになる。
それだけの機能しか無い。

スレッド環境じゃメモリーに値を取るのは、mutex呼べば強制的に
押さえ込まれるので関係ない。2重代入の消去にしてもグローバル変数や
引数で渡されたポインタに関してもmutexを読んだ場合は、
コンパイラが他の関数で参照する事を考え削除しないので影響はない。
よってvolatileの意味はない。
95 :デフォルトの名無しさん2011/10/03(月) 01:53:35.99
>>93
>mutexを呼んだ場合は、コンパイラが他の関数で参照する事を考え削除しない

これってstd::mutexに限った話です?
それともpthreadやWin32その他のAPIでもそうなるの?
96 :デフォルトの名無しさん2011/10/03(月) 02:01:28.56
>>95
インライン展開しない関数全般の話
関数を呼んだ時点で、呼び出し元の変数はスタックに退避される。
98 :デフォルトの名無しさん2011/10/03(月) 02:29:47.41
>>96
99 :デフォルトの名無しさん2011/10/03(月) 02:36:17.87
>>98 何が言いたい?mutexなら外部関数だからインライン展開されんぞ。
100 :デフォルトの名無しさん2011/10/03(月) 02:39:20.53
>>96-97
理解できたかも。なるほどです

スタティック領域/スタック領域/ヒープ領域などには関係なく、非インライン展開の関数をまたぐ場合、
コンパイラはメモリアクセス順を変えたり削除したりせずに常にメモリ書き込みコードを入れるってことかな
ただし書き込みと言ってもCPUキャッシュまでライトバックされるとは限らないから、スレッド間ではもちろんmutexが必要と

逆に言えば、ループ内でメモリを直接読み取る場合で、かつ関数をまたがないパスがあるなら、
コンパイラが最適化をかけて書き戻し命令が削除される可能性があるのでvolatileが必要
ってことですよね
103 :デフォルトの名無しさん2011/10/03(月) 02:48:41.45
>>100
あ、ちがうか
mutexでロックするならループ内で直接読み取る場合でもメモリ書き込みコードは削除されないから
結局ロックをかける限りvolatileはいらないってことになりますね。なるほど
323 :デフォルトの名無しさん2011/10/08(土) 14:40:52.77
>>322
このスレを>>93あたりから読み直せ
94 :デフォルトの名無しさん2011/10/03(月) 01:48:07.56
そもそもvolatileなんて組み込みやOSでのIO向け機能だし
((int*)0x10000) = 0x01;を連続で呼ばなきゃいけない場合とかに使う物
そもそもC++11以前のC++はスレッドの事を何にも知らん
97 :デフォルトの名無しさん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;}
108 :デフォルトの名無しさん2011/10/03(月) 12:49:54.36
>>97
いやvolatileが導入された時点でその意味は変更されてる。
強制したければ、volatile修飾子付けるしかない。
110 :デフォルトの名無しさん2011/10/03(月) 13:02:03.86
>>108
何が言いたいのかわかんない。
volatile有ろうが無かろうがあのコードの動作は変わらんぞ。

volatileの意味があるのはメモリマップドI/OとCの仕様書に
書いてあるようなシグナルとの通信のみ。
そのシグナルとの通信でさえ実際には、パイプとか
シグナル安全なブロッキング使うことになるから形骸的。
115 :デフォルトの名無しさん2011/10/03(月) 13:23:53.16
>>110
> シグナル安全なブロッキング使うことになるから形骸的。

シグナルハンドラ側でもアクセスしたい場合、
volatile付けとかないと。

Atomicityと最適化抑制の区別付けられてないのでは?
(他人がつけられてないと思っているが、
実際は自分がつけられてない)
116 :デフォルトの名無しさん2011/10/03(月) 13:36:44.10
>>113
>>97のコードはMutex読んでないし、
そもそもマルチスレッドの話しはしてない。
138 :デフォルトの名無しさん2011/10/03(月) 18:27:10.91
>>115
int discripter=-1;

void handler(int)
{
write(discripter ,略);
}
こういうケースなら論理上問題になら無い。

仕様でvolatileが保証すんのは、
シグナル実行中にグローバル変数の書き換えが発生した場合、
mainとhandlerどちらかの書き換えが飛ばされないということだけ。
handlerを動かす前に変数を初期化して、以降一切変更しないので
あれば影響無い。

因みにsignalとvolatileの話は、signal の仕様であってvolatileの
仕様ではない。別のページに書かれてる。
101 :デフォルトの名無しさん2011/10/03(月) 02:42:20.09
実装上ありえないって話と仕様のどこで明示されてるって話は別だろ
102 :デフォルトの名無しさん2011/10/03(月) 02:46:00.81
実装上でもありえんこと言ってる奴までいるし
106 :デフォルトの名無しさん2011/10/03(月) 02:51:30.12
>>102
だから主語を言えって。他人が読んでるわけで、
あんた一人が書いてるチラシの裏じゃないんだから。
104 :デフォルトの名無しさん2011/10/03(月) 02:49:06.75
仕様上どうするかロクに書いてないvolatileより
論理的に確実性がある分マシ
107 :デフォルトの名無しさん2011/10/03(月) 09:29:22.60
ラムダでキャプチャする変数を
一部だけ変更可能にする方法ないでしょうか
全部一括でconstかmute しかないの?
112 :デフォルトの名無しさん2011/10/03(月) 13:15:00.12
globalにvolatile qual.付けなきゃ、
関数から戻って来た後の値は不定。
呼び出す前にメモリに書き込まなくていいから。
113 :デフォルトの名無しさん2011/10/03(月) 13:18:11.58
>>112
mutex呼んだ時点で書き込まれるから要らん。
逆にvolatileをmutex がわりにする事もできん。
119 :デフォルトの名無しさん2011/10/03(月) 13:49:37.11
>>112
んなわけないじゃん
全ての値の変更は副作用完了点を通れば完了するよ


もしかして釣り?
136 :デフォルトの名無しさん2011/10/03(月) 18:08:29.84
>>120
そうだったな

それでも>>112が03でも11でも間違っていることに違いはないけど
153 :デフォルトの名無しさん2011/10/03(月) 20:10:29.31
>>136
横から悪いけど、11から副作用完了点って削除されるの?どう処理されるか厳密に決められた訳?
154 :デフォルトの名無しさん2011/10/03(月) 20:16:27.57
171 :デフォルトの名無しさん2011/10/03(月) 21:19:07.10
>>154
ありがとう。勉強になった
114 :デフォルトの名無しさん2011/10/03(月) 13:20:43.34
C++でのvolatileの誤用についてはとりあえずあれだ、gosling先生が悪いってことにしとこうぜ
117 :デフォルトの名無しさん2011/10/03(月) 13:40:16.33
結局どっちが正しいの?
volatile指定と関数呼び出しは、(コンパイラにとっての)可換なメモリバリア指定なの?
118 :デフォルトの名無しさん2011/10/03(月) 13:46:28.10
>>117
volatileはmemorry barrierと直接関係無い。
最適化抑制にすぎない。
Barrierは別に必要になる。
可換どころか直交。
122 :デフォルトの名無しさん2011/10/03(月) 15:22:28.38
>>118
メモリバリアとか別の話をしてすまん
volatile指定と関数呼び出しは置き換え可能な最適化抑制なの?
120 :デフォルトの名無しさん2011/10/03(月) 15:12:52.88
実行スレッドから見てas isであればよい。

それからこのスレ的には、
副作用完了点なんてものは過去のもの。
123 :デフォルトの名無しさん2011/10/03(月) 16:41:48.24
出来ない。
メモリアクセスに関する最適化抑制が出来るのはvolatileだけ。
124 :デフォルトの名無しさん2011/10/03(月) 16:47:12.66
誰かわかりやすく3行でまとめろ
125 :デフォルトの名無しさん2011/10/03(月) 16:55:04.78
>>124
インライン展開されない関数で変数を挟めば最適化を抑制できる
スレッド間で変数を共有したいならmutexで挟め(volatileなんて忘れろ)
volatile信者はアホ
127 :デフォルトの名無しさん2011/10/03(月) 17:05:36.62
>>125
> インライン展開されない関数で変数を挟めば最適化を抑制できる

出来ない。
評価順序の規程は同一実行スレッド内に限られた話。
順序は同一スレッドからas isでいいので、
副作用のある操作もメモリアクセスは保証されない。

なお、mutexは、例えばgcc/g++を使っている場合、
__asm__volatileを使って実装されている。
129 :デフォルトの名無しさん2011/10/03(月) 17:16:10.42
>>127
なんでメモリバリアの話を持ち出すわけ?
メモリバリアしたけりゃmutex使え。
__asm__volatileとかそんな独自キーワード出されてもね。
131 :デフォルトの名無しさん2011/10/03(月) 17:33:53.18
>>126
今の話はソースコード通りの読み書きが保証されるか?って話で同期は関係無いだろ

ところで>>125の話は、LLVMやLTOみたいな、
「inlineを付けてなくてもプログラム全体を通して1箇所からしか呼ばれてないから直接展開するぜ」
みたいな最適化をするコンパイラだとどうなるんだ?
134 :デフォルトの名無しさん2011/10/03(月) 17:57:21.53
>>131
>直接展開するぜ
展開されちゃってるぞ。言いたいことは分かるけど。
126 :デフォルトの名無しさん2011/10/03(月) 16:58:45.49
if(volatile_v)  ○ volatile_v=fail;
// 別threadが↑ここで書き換える可能性
// atomic云々関係なしで
128 :デフォルトの名無しさん2011/10/03(月) 17:07:46.31
もしかして : volatileを使ってmutexを実装する話をしている人が混ざっている
132 :デフォルトの名無しさん2011/10/03(月) 17:44:13.51
あれ、関数は論理的に副作用がなければ実行順序は無保証、volatileもその変数自身以外は無保証、だと思ってたが
133 :1112011/10/03(月) 17:52:10.95
俺の質問に答えてくれ
135 :デフォルトの名無しさん2011/10/03(月) 18:07:31.55
>>133
volatileがマルチスレッドに必要だと考えてるバカがいたから。
137 :デフォルトの名無しさん2011/10/03(月) 18:08:52.34
>>133
多分↓みたいな場合に最適化抑制用のvolatile修飾が変数vに必要か不要かって話じゃないの?
それでLLVMやLTO?でもそれは正しいのかっていう話だと思うけど
int v = 0;
mutex m;
void thread_main() {
 for (;;) {
  m.lock();
  if (v) { m.unlock(); break; }
  m.unlock();
 }
}
139 :デフォルトの名無しさん2011/10/03(月) 18:36:39.85
>>137
不要な理由を挙げるとこんな感じか

mutexの実装にOSのAPIを呼んでいるならAPIの展開なんてまず無理。
アセンブラで実装してるなら副作用の有無が分からないからアセンブラを挟んで最適化しない。
たとえアセンブラのコードを解析して最適化しようとしても、メモリバリア命令の存在が分かるだろうからやっぱり最適化しない。
そもそもmutexを使用しているのに最適化されるならmutexの存在する意味が無い。
142 :デフォルトの名無しさん2011/10/03(月) 18:48:07.16
>>139
全部憶測じゃないの?それ
結局はそのmutexの仕様、コンパイラの仕様、CPUアーキの仕様にC++の仕様を合わせて個別に確認しないと
何も保証されないし何もわからないってことですよね
143 :デフォルトの名無しさん2011/10/03(月) 19:00:05.66
>>142
mutex=メモリバリアしてくれる関数を前提として話しているので
意味不明な心配をされても困るんだけど
まあC++11のstd::mutexでも使いなよ。規格で保障されてるんだから
140 :デフォルトの名無しさん2011/10/03(月) 18:38:59.78
ghan&Ritchieの本『プログラミング言語 C』より
「volatileの目的は,黙っていると処理系で行われる最適化を抑止するこ とにある.
例えば,メモリ・マップ方式の入出力をもつマシンでは,ステー タス・レジスタに対するポインタは,
ポインタによる見かけ上,冗長な参照 をコンパイラが除去するのを防ぐのに,
volatileへのポインタと宣言するこ とが可能である.」

元々目的も違う。
141 :デフォルトの名無しさん2011/10/03(月) 18:40:18.05
>>140
あっ名前が切れた。ごめんなさい先生。
144 :デフォルトの名無しさん2011/10/03(月) 19:00:40.20
憶測はおいといて、環境依存なのは当たり前。
C++はスレッドなんか知らんからな。

だがmutexで囲む変数にvolatileを求める仕様は、
少なくともwindows ,unix, linux には無い。
185 :デフォルトの名無しさん2011/10/03(月) 23:37:45.83
>>144
> 憶測はおいといて、環境依存なのは当たり前。
> C++はスレッドなんか知らんからな。

おいおい、規格ちゃんと読んでないのに、
そんな断定書き込むな。
4年くらい知識遅れてるじゃねーか。
145 :デフォルトの名無しさん2011/10/03(月) 19:04:26.33
mutexじゃなくてスピンロックならどうなるのかなっと
146 :デフォルトの名無しさん2011/10/03(月) 19:27:17.69
>>145
そもそもCじゃまともなスピンロックはできない。
特にマルチコアなら顕著。
出来るのはアセンブリレベル。

メモリから値を読み込み、条件判定をし、
ロックの更新をしてる間に、他のスレッドも
条件判定を通過できるんですぐ破綻する。
151 :デフォルトの名無しさん2011/10/03(月) 20:09:03.87
>>146
std::atomicってそのためのもんじゃないのか
161 :デフォルトの名無しさん2011/10/03(月) 20:41:47.50
>>159
>>146 と同じ話なんで論外。
運悪ければデータ破損する。
147 :デフォルトの名無しさん2011/10/03(月) 19:53:27.23
mutexなんてC++03の仕様にないんだから
規格の範囲内じゃmutexがどうこうなんてどうも言えん
148 :デフォルトの名無しさん2011/10/03(月) 19:55:36.81
x86以外の現役CPUは、ARMをはじめみんなI/Oポートをメモリー空間にマップしてんだよな。
C++にはメモリバリアも仕様で追加されたし、今の仕様のvolatileを必要とするCPUは大量にあるし、
今後C++2x、C++5xが登場しようとvolatileがスレッドに絡んでくることは無いだろうな。
152 :デフォルトの名無しさん2011/10/03(月) 20:10:09.57
#include <windows.h>
#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 が変更される可能性があると判断されて
無限ループじゃなくなるんだけどね
155 :デフォルトの名無しさん2011/10/03(月) 20:16:32.01
>>152
だからmutex( CriticalSection )挟めばいいだろ。
なんでvolatileに拘るんだ?必要な最適化もされなくなくなって無駄なだけだぞ。
159 :デフォルトの名無しさん2011/10/03(月) 20:38:28.20
>>155
mutexはパフォーマンス落ちるからだろ
スレッド内でフラグ読むだけなら同期なんて要らないんだから
mutex使う方が無駄

あと、それはmutex用の「関数呼び出し」があるおかげで最適化されないというだけの危うい方法
160 :デフォルトの名無しさん2011/10/03(月) 20:39:05.76
>>152の書き方はバグのもとだからwinならinterlockedを使うのが普通
で、interlockedを使えば最適化とかキャシングとか何も考えずにコーディングすれば間違いは起こらない
ってことでいいの?
163 :デフォルトの名無しさん2011/10/03(月) 20:48:18.10
実際はなんかのタイミングを合わせるためにやってんだろ。
その実際の処理でデータが破壊される。
ま、本当に何の処理もせず>>152のコードまんまを
走らせたいんならどうでもいいけど。
169 :デフォルトの名無しさん2011/10/03(月) 21:10:11.11
>>152はVC2010(x86)という特定の環境でこのシンプルな使用方法なら問題ないとおもうが
かなり汎用性にかけるので気持ち悪い。コードが複雑になってくればvolatileはバグの温床になるぞ
268 :デフォルトの名無しさん2011/10/06(木) 08:38:24.71
そういやvolatileって常にメモリーから読み出されるか
どうかはなんら保証は無いよな。
>>152みたいにいつ止まろうがどうでもいい例は別として。
もしかしたら無限ループになるかもしれんけど。
270 :デフォルトの名無しさん2011/10/06(木) 10:39:00.69
>>268
マルチスレッドがらみじゃないならスレ違い、
初心者スレで教えてもらってこい。
274 :デフォルトの名無しさん2011/10/06(木) 12:55:21.98
>>270
ここは規格についてのスレだろ
275 :デフォルトの名無しさん2011/10/06(木) 13:00:29.65
>>270
初心者もくそもJIS規格読んでみろや知ったかぶり
277 :デフォルトの名無しさん2011/10/06(木) 21:38:22.44
>>275
なんで ``JIS規格'' か, 汲んでやれよ
英語読めない低能だから吠えてんだろ?
157 :デフォルトの名無しさん2011/10/03(月) 20:21:14.65
このスレって割り込みやシグナルとスレッドをごっちゃにしてるヤツがいないか?
割り込みは、他の関数呼び出しが無理やり入るだけで、呼び出された関数が
終了するまで本筋の処理は中断するんだぞ。スレッドみたいに並走はしない。
volatileが割り込みで使えたからと言って訳が違う。
164 :デフォルトの名無しさん2011/10/03(月) 20:49:33.96
No。タイミング合わせじゃない

flagを変更したタイミングを厳密に見たい場合は当然lockしないといけないけど、
大体で良ければ同期せずvolatileのフラグをポーリングしておけばいい
ワーカスレッドの動作をあまりパフォーマンス落とさずにキャンセルさせる時によく使う

実際には何かの処理を行うが、
関数呼び出しのないただの演算のみって場合もあるので
その場合はvolatileがないとアウト
165 :デフォルトの名無しさん2011/10/03(月) 21:07:20.72
どうやって入力して、どうやって出力する気か。
まぁいいや。スレ違いだそろそろやめるか。
166 :デフォルトの名無しさん2011/10/03(月) 21:08:29.60
ポーリングウェイトとかいつの時代のプログラムだよ
170 :デフォルトの名無しさん2011/10/03(月) 21:10:27.45
演算しかしないならスレッドそのものを中断したほうが速いだろ
フラグで中断しようが、スレッドで中断しようが演算結果に大差ない
172 :デフォルトの名無しさん2011/10/03(月) 21:22:52.78
>>166
ウェイトじゃないって

>>169
volatileは最適化を阻害するから汎用性はある
どのコンパイラだろうが汎用的に使えるよ
フラグにしか使わない(使えない)からこれ以上複雑になる事もない

>>170
ループ外に問題があったら駄目だろ
173 :デフォルトの名無しさん2011/10/03(月) 21:25:59.55
>>172
volatileじゃメモリバリアの保証が無いだろ。マルチスレッドプログラミングに用いるのは間違い。
174 :デフォルトの名無しさん2011/10/03(月) 21:34:00.58
キャンセルしてスレッドは速やかに動作を終了し、
スレッドは共有してる他の情報に手を出さないんだから
関係ないと思うが
176 :デフォルトの名無しさん2011/10/03(月) 21:36:57.65
そんなにメモリバリアを保証したけりゃ
フラグチェックした「後」にどうこうすればいい話
わざわざループ内でlockのコストを払う必要はない
177 :デフォルトの名無しさん2011/10/03(月) 21:42:34.24
てかリードにメモリバリアとか関係あるの?
書く時だけでしょ
178 :デフォルトの名無しさん2011/10/03(月) 21:43:39.49
ループにvolatile混じってたら自動ベクトル化が掛からんだろ。
演算ループだけ追い出して、ループごと強制終了。本気で速度が欲しいならコレおすすめ。
179 :デフォルトの名無しさん2011/10/03(月) 21:45:22.13
だからVC2010でこのシンプルな使い方については問題ないと言ってる。

大体コストが気になるほど猛烈な勢いで終了flagをチェックしてるのか?
windowsのクリティカルセクションの開放取得で80〜200サイクルだぞ
188 :デフォルトの名無しさん2011/10/03(月) 23:52:21.19
std::atomicってvolatileなくてもよかったっけ?
volatile std::atomic<volatile int> a; みたいなサンプルコードをどっかで見たような
189 :デフォルトの名無しさん2011/10/03(月) 23:56:24.04
>>188
いらない。
誰だよ、そんなサンプルコード書いた奴は
191 :デフォルトの名無しさん2011/10/04(火) 00:39:07.03
そうなの?
N3290確認したらstd::atomicってvolatileメンバ関数いっぱい持ってるんだけど
これってvolatile atomicとして使う必要がある場合があることを想定してるんじゃないの
193 :デフォルトの名無しさん2011/10/04(火) 02:10:28.99
>>191
C1xとatomic関連の仕様を共通にしようとgdgdやってたときの名残。
当時はヘッダファイル名も<cstdatomic>だったりしたな。
196 :デフォルトの名無しさん2011/10/04(火) 09:39:35.63
>>191
内部実装のために必要。
volatileなければ、ポータブルなatomic実装書くことは不可能。
231 :デフォルトの名無しさん2011/10/04(火) 22:38:22.87
>>193 >>196 いい加減なこと言いすぎだろ。
198 :デフォルトの名無しさん2011/10/04(火) 10:31:42.66
そもそもvolatileってロードやストアを必ず1命令になるようコンパイルする仕様上の保証とかあったっけ?
199 :デフォルトの名無しさん2011/10/04(火) 10:38:32.66
>>198
なぜそんな質問をいきなりするのか不明。
200 :デフォルトの名無しさん2011/10/04(火) 10:39:08.52
>>199
ロード・ストアが1命令になるよう必ずコンパイルされるという仕様上の保証がなければ
「ポータブルに」atomicは書けないじゃん
203 :デフォルトの名無しさん2011/10/04(火) 11:42:38.00
>>200
ポータブルに書く必要はないし、
std::atomicの下はこのスレの範囲外だよ。gccスレなりvcスレなりで話せばいい
204 :デフォルトの名無しさん2011/10/04(火) 13:15:24.92
>>198
ねぇよ。アセンブリ命令がどうなるかなんて規定は無い。
ただCレベルから見て無駄な演算が消えたり、
Cレベルから見た演算順序が維持される。
例えば32bit環境で64bitの型を使うと
volatile 付けてても
2分割してメモリに書き込まれたりする。
201 :デフォルトの名無しさん2011/10/04(火) 11:15:52.69
CASとか最低限のところだけasm volatile、後はvolatileを使ってる。
volatile修飾子なかったら全部asm volatileで書くしかない。
205 :デフォルトの名無しさん2011/10/04(火) 13:19:08.04
>>201
CASってなんだ?
工業用のあれでは無いよな。
202 :デフォルトの名無しさん2011/10/04(火) 11:20:49.50
volatile指定しても他のスレッドでのアクセスが反映される保証は無いというのは
昔から全く状況は変わっていないし何を問題にしているのかわからない
処理系依存のコードと誤ったコードというのは別だろ
210 :デフォルトの名無しさん2011/10/04(火) 15:57:47.36
>>202
> volatile指定しても他のスレッドでのアクセスが反映される保証は無いというのは
> 昔から全く状況は変わっていないし

C++11規格の第一章すら読んでないの丸バレ。


212 :デフォルトの名無しさん2011/10/04(火) 16:31:14.87
>>210
1章読み直したがやっぱり変わってないぞ
399 :デフォルトの名無しさん2011/10/11(火) 01:00:51.34
>>202が言うには誤ったコードらしいですよ奥さん
でたらめな話だけど
411 :デフォルトの名無しさん2011/10/11(火) 10:15:31.84
>>399
処理系依存のコードであって誤ったコードではないと言ったんだよ
当たり前だろ
412 :デフォルトの名無しさん2011/10/11(火) 10:38:57.49
>>411
正確には「処理系依存」ではなく「未定義動作」だ。
421 :デフォルトの名無しさん2011/10/11(火) 19:35:27.92
>>412
処理系依存です

Whatever decisions are adopted on such issues must be documented,
as volatile access is implementation-defined.
422 :デフォルトの名無しさん2011/10/11(火) 19:58:56.25
>>421
C++11の仕様書にはそんな文言は書かれてないんだが
430 :デフォルトの名無しさん2011/10/12(水) 01:18:57.38
>>423(>>421)
それ C99 の規格じゃなくて rationale でしょ。ちゃんと区別してね。
206 :デフォルトの名無しさん2011/10/04(火) 14:13:45.96
volatile と atomic 操作ってまったく関係ないのに
なんでごっちゃになってるの?

volatile って代入した次の瞬間にその変数の値は蒸発してしまって
何が入っているか見当がつかないっていう、それだけの意味だろ……
207 :デフォルトの名無しさん2011/10/04(火) 14:40:43.25
>>206
>volatile と atomic 操作ってまったく関係ないのに
>なんでごっちゃになってるの?

エスパーすると、「Writeスレッドがread-modify-writeしない場合は、volatile指定すれば良い」という認識のサイトが多いから、それで勘違いしてるんでは?
209 :デフォルトの名無しさん2011/10/04(火) 15:44:54.96
>>207
このスレにはそんな書き込みしてる奴いないのにねえ。

211 :デフォルトの名無しさん2011/10/04(火) 16:06:18.66
<atomic>にvolatile T*の引数を持つ関数が定義されてる。
新しい規格でvolatileの意味がまともに決まってないと思える頭の構造が分からん。
「全てのスレッドで〜」と説明するサブセクションでvolatileが言及されてるのに!
215 :デフォルトの名無しさん2011/10/04(火) 19:47:22.14
atomicが最適化されて期待通りの動作にならないことがあるとか?
216 :デフォルトの名無しさん2011/10/04(火) 21:27:21.33
http://www.open-std.org/jtc1/sc22/wg21/docs/18015.html
これって最新の規格?
まだ未確定の時のヤツ?
219 :デフォルトの名無しさん2011/10/04(火) 21:35:58.91
>>216
そもそも規格ですらない
ただのテクニカルレポート
229 :デフォルトの名無しさん2011/10/04(火) 22:11:13.23
>>227
せめて正式版ではないにしろ>>216ぐらいは読め。

volatile atomic< int* > device = reinterpret_cast< int *>( 0x00000111 );
250 :デフォルトの名無しさん2011/10/05(水) 22:51:18.85
>>229
そのコードも変だぞ
217 :デフォルトの名無しさん2011/10/04(火) 21:31:37.67
atomicにvolatile入ってんのは、atomicがvolatile必要なんじゃなくて、
volatile用のatomicが必要だからオーバーロードしてあるだけじゃねぇか。
218 :デフォルトの名無しさん2011/10/04(火) 21:35:32.82
上の方でatomicにはvolatile必要ないって散々言ってたのは何だったのか
221 :デフォルトの名無しさん2011/10/04(火) 21:40:00.58
>>218
いや正しいだろ。
220 :デフォルトの名無しさん2011/10/04(火) 21:37:41.28
どんな時に必要になるのかって話じゃないの?
メモリマップドIOにatomic使う訳でもないだろうし
222 :デフォルトの名無しさん2011/10/04(火) 21:42:49.13
メモリマップドIOにatomic使うんだろ
組み込みの世界じゃコアが32個とかザラだし。
235 :デフォルトの名無しさん2011/10/05(水) 01:37:13.95
>>222
メモリマップドIOに普通のint型とかじゃなくてatomicを使う理由は何?
volatile atomic<int>じゃなくてvolatile intでいいじゃん。
223 :デフォルトの名無しさん2011/10/04(火) 21:49:18.29
マルチスレッドでvolatile使うよ派の方々はvolatile使って何したいの?
226 :デフォルトの名無しさん2011/10/04(火) 22:00:30.94
volatile atomicのまとめ。

メモリマップドI/Oの際、連続して値を代入することが求められる。
そのため1回のロックをしている間複数回値の代入をする場合がある。
atomicはテンプレートでありインライン展開される。
インライン展開された場合、関数が消失し、その中にあるvolatile変数へ
の代入も消失する可能性がある。
よってvolatileを維持するためにatomicはvolatileメンバーを持っている。
228 :デフォルトの名無しさん2011/10/04(火) 22:08:40.87
>>226
まとめも糞もおんなじ様なこと書いてあんじゃん

[ 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 ]
240 :デフォルトの名無しさん2011/10/05(水) 07:18:03.94
>>228
これってatomic<T>をvolatile atomic<T>にキャストしてもvolatileにならないから注意しろって書いてあるだけだよね
227 :デフォルトの名無しさん2011/10/04(火) 22:05:53.69
volatile atomic_short *p = (volatile atomic_short *)0xA0000000;
みたいにして使えるの?
232 :デフォルトの名無しさん2011/10/04(火) 22:48:43.94
auto x = new auto(’a’);

こうできるといわれてみれば確かになんだが、地味に感心した。
233 :デフォルトの名無しさん2011/10/04(火) 23:11:17.03
なんで条件変数まで入って、メッセージキューが無いのか。
それはともかくusingが地味に便利っぽいな。多重継承したとき、
1つに実装があればその実装でオーバーライドできるとか。
なんで今まで出来なかったのか。
236 :デフォルトの名無しさん2011/10/05(水) 01:51:02.01
マルチコアでメモリマップドI/Oした場合、
他のCPUが信号送ってる途中に割り込むから危険だろうが。
237 :デフォルトの名無しさん2011/10/05(水) 02:39:44.19
>>236
メモリマップ領域の同じアドレスに、異なるスレッドが同時に書き込んだりは普通しないでしょ。
別途mutexなどで排他し、同時アクセスはしないようにするだろ。
243 :デフォルトの名無しさん2011/10/05(水) 12:56:41.08
>>237
atomicの書き方しってる?
239 :デフォルトの名無しさん2011/10/05(水) 03:56:35.32
そのmutexをさぼるためでしょ
ほっとくとvolatileだけで大丈夫キリッとか言い出す馬鹿がいるから
244 :デフォルトの名無しさん2011/10/05(水) 16:11:18.22
>>239
あるメモリアドレスAに1を書きこんでからアドレスBのデータを読み込み最後にアドレスAに0を書く、
みたいな一連の操作の排他は、アドレスAやBをatomic変数にしてもできないでしょ。
246 :デフォルトの名無しさん2011/10/05(水) 16:43:31.80
>>244
「一連」の操作にするにはmutex必須だな
「書き捨て」でいいならatomicで足りる
249 :デフォルトの名無しさん2011/10/05(水) 22:34:38.51
>>246
お前恥ずかしくないか
242 :デフォルトの名無しさん2011/10/05(水) 08:19:15.80
メモリマップドI/O使うヤツにそんな馬鹿は居ないだろうけど。
247 :デフォルトの名無しさん2011/10/05(水) 17:23:54.81
atomicが何してるかもまるでわかってないのによく書き込む気になるな
251 :デフォルトの名無しさん2011/10/05(水) 22:53:31.52
このスレでこのレベルじゃ
atomicとvolatileをマスターすれば食うに困らんな。
257 :デフォルトの名無しさん2011/10/06(木) 00:51:52.74
>>251
このスレには素人しか居ませんから。
260 :デフォルトの名無しさん2011/10/06(木) 01:40:24.28
で。std::dequeの連続性が保証されるのは今回からか?
それともまだ見送り?
262 :デフォルトの名無しさん2011/10/06(木) 01:58:23.26
>>260
アホ
263 :デフォルトの名無しさん2011/10/06(木) 02:09:09.06
>>260
実装がLinkedListによるものだったらどうするつもりなんだろう・・・。
264 :デフォルトの名無しさん2011/10/06(木) 02:20:05.36
如何にも無理やり中身を抉り出してます感
全開のvectorの直列仕様もどうなんだろ。
もっとましなアドレス取得用のインタフェース用意してくれんかね。
265 :デフォルトの名無しさん2011/10/06(木) 02:27:47.56
>>264
正直、C言語使わないのであれば、参照でVector本体を渡してしまうので、アドレスの直列性とかはあんまり気にならんなー。
Cであってもstdioでファイル書きこむときくらいじゃないかな?直列性なくて困るのって。
267 :デフォルトの名無しさん2011/10/06(木) 07:51:22.83
>>265
SIMDが面倒
273 :デフォルトの名無しさん2011/10/06(木) 12:35:10.62
>>265
Cでも列挙子のインターフェースを提供すればいいじゃないか
COMのCINTERFACEのように見苦しくなりかねないが下手に並べ直すよりもコストは低いと思う
266 :デフォルトの名無しさん2011/10/06(木) 07:22:35.45
配列とvectorとどちらにでも対応できないと
困る関数もあんだろ
271 :デフォルトの名無しさん2011/10/06(木) 10:50:38.38
volatileひとつにこんな議論してたんじゃアプリができるころにはおじいちゃんだな
279 :デフォルトの名無しさん2011/10/07(金) 19:15:11.05
Javaのvolatileはちゃんと実装されてない事があるみたいな事聞いた事あるけど
今は違うのか?
285 :デフォルトの名無しさん2011/10/07(金) 21:14:03.98
>>279
そっちでもやっぱり使い方間違ってる人がいる、
ってだけ。
281 :デフォルトの名無しさん2011/10/07(金) 20:09:11.55
んなこたー知ってる

http://www.ibm.com/developerworks/jp/java/library/j-dcl/
>多くのJVMでは、順序の一貫性について、volatile が正しく実装されません。

ってのが今はどうなのかって事
284 :デフォルトの名無しさん2011/10/07(金) 20:47:26.64
もう9年以上も前の話だしな。
さすがに、まだ未解決のはずがない。
287 :デフォルトの名無しさん2011/10/07(金) 21:43:37.82
http://www.open-std.org/jtc1/sc22/WG14/www/docs/C99RationaleV5.10.pdf
JISが不正確かどうかしらんが、volatileがメモリーに常に割り当てるかどうかはやっぱり未定義。
割り込みでsig_atomic_tを使った場合はともかく、スレッドで全てのシンボルが同一の値を指してる保証はない。
さてvolatile厨はどう反論するきだ?
375 :デフォルトの名無しさん2011/10/10(月) 18:17:20.49
>>372
>>287
C99の仕様解説だがC++とは共通。
288 :デフォルトの名無しさん2011/10/07(金) 21:46:25.88
仕様より実装のほうが大事
マニュアル読まない奴はカス
289 :デフォルトの名無しさん2011/10/07(金) 21:54:38.27
メモリバリアは保証しないけど
永遠に異なる値を指す事はあり得ないので
タイミングが重要でないものに使うのは問題ないと何度言えば
291 :デフォルトの名無しさん2011/10/07(金) 21:58:36.61
>>289
割り込みと違ってスレッドの場合は、永遠と値が異なる処理系があっても構わん。
命令の順序さえ変わらなきゃいいんだから、少しでも早くしたいリアルタイム系の
処理系なら有りうる。
290 :デフォルトの名無しさん2011/10/07(金) 21:54:56.88
だったらGCCなり、IC++なり、CLなり処理系のスレで叫んでろよ。
規格のスレでほざくんじゃねぇ。
292 :デフォルトの名無しさん2011/10/07(金) 22:00:02.20
thread_localでないものが同一オブジェクトを指さないのは規格違反じゃね
294 :デフォルトの名無しさん2011/10/07(金) 22:06:45.31
アドレス同じなのに値が永遠に異なるとか
具体的にどういう処理系があんだ
295 :デフォルトの名無しさん2011/10/07(金) 22:12:40.36
1.アドレスを参照しない
2.関数を呼ばない

1つの関数内でこれが守られていれば、
グローバル変数は関数の最初とreturn 時以外は
レジスタに配置しておいても規格上問題はない。
296 :デフォルトの名無しさん2011/10/07(金) 22:18:13.92
処理系の検知できない手段で変更がある可能性を考えて
最適化はvolatileつきでは行わないとか
volatileオブジェクトはabstract machineのルールに厳密に従わないといけないとか
書いてあるんだけど
297 :デフォルトの名無しさん2011/10/07(金) 22:22:51.54
で、レジスタに配置することが最適化になるかね?
レジスタかメモリーか、それどころかvolatileの向こうは
ハードウェアですらいいことになってるんだけど。
298 :デフォルトの名無しさん2011/10/07(金) 22:23:35.66
別にレジスタに配置されてもいいけど
それを検知できるというのがvolatileだ

要するに鼻から出てきた悪魔がメモリを変更しても
volatileがついてたらそれを検知できないといけない
ただ、現実問題同時性までは保証してないようだが
299 :デフォルトの名無しさん2011/10/07(金) 22:27:58.44
そもそもvolatileは同一の値を指してる事は保証しないとね。
名前からして揮発修飾しだしね。

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.
302 :デフォルトの名無しさん2011/10/07(金) 22:39:21.99
>>299 読めば解るが、値が勝手に変わらないことを保証したければvolatileを付けない。
volatileを付けた時点で変数が以前の値を保持する義務が無くなる。
305 :デフォルトの名無しさん2011/10/07(金) 22:46:09.01
だから、それはvolatileの使い方が間違ってんの。

>>287 の75ページから読んでみろ。 >>299に書いてある内容の続きがあるから。
301 :デフォルトの名無しさん2011/10/07(金) 22:34:17.38
いつ値が変更されるか分からないという意味で揮発修飾なわけだが
変更する奴が誰か分かっていて、
さらに変更する奴がいないと分かってる状態で
永遠に異なる値を指してもいいってのは拡大解釈じゃね
303 :デフォルトの名無しさん2011/10/07(金) 22:42:17.58
いや、別スレッドで値が変えられることを考慮するためには
値が勝手に変わる事を保証しないと駄目だろ
以前の値を保持されちゃ困るからvolatileつけるってのに
304 :デフォルトの名無しさん2011/10/07(金) 22:46:00.78
勝手に変わる事を保証、じゃないや
別に保証はいらなくて考慮さえされてればいい
306 :デフォルトの名無しさん2011/10/07(金) 22:58:15.42
volatilleを値共有に使いたい場合、プロセス間でのメモリマップドを
応用すれば一番確実な方法は

int value;
const volatile int *referece = &value;

って事らしい。
307 :デフォルトの名無しさん2011/10/07(金) 23:04:11.69
volatileは左辺値のキャッシングを行わないだけで
左辺値のアクセス自体に対しては特に特殊な要求はないように見えるが

で、同じ左辺値が誰も変更操作を行ってないのに
見る箇所によって異なる値を持ち続けて良いのか、という事、
これはvolatileとは無関係な話でvolatileの規格だけ見ても埒があかない
324 :デフォルトの名無しさん2011/10/08(土) 23:40:35.76
>>307
スレッドを無視すれば、関数から脱出するか、
別の関数を呼び出すまでレジスタだけに値を置いといても問題はない。
割り込みがあっても、sig_atomic以外は保持する義務も無いし、
言語仕様に基づいてプログラム書いてる限りでは、レジスタの値だけを
更新することは問題にはなりえんよ。
308 :デフォルトの名無しさん2011/10/07(金) 23:09:25.25
誰もってのはハードウェアから鼻から出た悪魔まで含めての話な
309 :デフォルトの名無しさん2011/10/07(金) 23:09:45.90
C++11からマルチスレッドを考慮した規格になったので、
volatileオブジェクトへの書き込みは他スレッドから見られることになりました。
312 :デフォルトの名無しさん2011/10/07(金) 23:11:27.52
>>309
ソース。
311 :デフォルトの名無しさん2011/10/07(金) 23:11:01.37
とにかくvolatileで保証されるのは、副作用(I/O)のための順序だけ。
volatile変数がメモリー上に存在しないかどうかは完全に処理依存。
313 :デフォルトの名無しさん2011/10/07(金) 23:12:27.63
volatileは普通ポインタにつけるから
グローバル変数の話はどうでもいいよ・・・
314 :デフォルトの名無しさん2011/10/07(金) 23:16:09.08
組み込みの世界じゃアセンブリで実体をハードに割り当てる場合も割とあるけどな
extern const long hard_clock;
316 :デフォルトの名無しさん2011/10/07(金) 23:18:12.99
その場合はセクション割り振るから
メモリアドレス振られるのは保証されるんじゃない
317 :デフォルトの名無しさん2011/10/07(金) 23:22:37.92
アセンブラで実体作ってるから
レジスタには置かれないな

てかexternのものはそもそも実体がレジスタには置かれない・・・よね?
318 :デフォルトの名無しさん2011/10/07(金) 23:23:37.96
ハードに割り当てる話は、メモリとレジスタ云々には関係ないぞ
ポインタじゃなくても使うことがあるという例を書いただけ
319 :デフォルトの名無しさん2011/10/07(金) 23:29:35.55
グローバル変数でexternしてないvolatileの実体が
メモリに置かれるとは限らない、という話だが、
グローバル変数をレジスタに置くのは規格に沿うのだろうか
registerはグローバル変数に付けられないし
321 :デフォルトの名無しさん2011/10/08(土) 00:02:49.42
>>319
元々registerは強制的にレジスタを割り当てる修飾子だったんだから
広域変数に割り当てられないのは当然だろ。関数呼び出しがおかしくなる。

register就職できないとはいえ、関数内で広域変数をレジスタに
割り当てるのはコンパイラの自由。というかレジスタマシンじゃ
割り当てないと計算できん。
320 :デフォルトの名無しさん2011/10/07(金) 23:48:49.69
あーでもstaticで一箇所からしか使ってなければ
あり得なくはない・・・のか?
322 :デフォルトの名無しさん2011/10/08(土) 00:22:10.59
関数内で割当て?
複数関数で使ってても?
325 :デフォルトの名無しさん2011/10/09(日) 00:40:00.98
全てアセンブラで書いてるときに
複数スレッドで1つのレジスタを共有なんてのは当たり前

おおかた ARM のバンク切り替えあたりで思考停止したようだな
327 :デフォルトの名無しさん2011/10/09(日) 05:09:23.78
>>325
全部アセンブリで書くことなんて無いだろ。
てか、アセンブラで書くなんてほざいてる時点で
まともにアセンブリコード書いたこと無いだろ。
342 :デフォルトの名無しさん2011/10/09(日) 18:02:44.96
>>325 に、どのCPUでどんなコード書いたか書いてもらうのが早いな。
OSもあるなら、なんていうOSか聞きたい。
でも結局、昔の(Z80とかであるような)割り込みなんだろうな、そうなら書かなくていいよ。
329 :デフォルトの名無しさん2011/10/09(日) 09:37:27.47
ハードのデバッグ中なんかもちフル汗だし
そうでなくても割り込みなんぞ本質的にマルスレだね
ユニプロでちまちま書くかあっさり疎結合かにもよるが
前者ならレジスタ共有は捨てがたいテクだし
336 :デフォルトの名無しさん2011/10/09(日) 16:06:15.87
>>329
割り込みは、並列稼働しないだろ。
割り込み処理が終わるまで、
メインの処理は止まる。
330 :デフォルトの名無しさん2011/10/09(日) 09:43:30.72
割り込みはマルチスレッドとは言わない
コンテキストスイッチがない
331 :デフォルトの名無しさん2011/10/09(日) 10:32:24.34
あるよ
逆に CPU アフィニティなんぞコンテキストスイッチのないマルスレだしな
334 :デフォルトの名無しさん2011/10/09(日) 11:33:27.06
>>331
> CPU アフィニティなんぞコンテキストスイッチのないマルスレだしな
は?
じゃあ、シングルコアCPUでのマルチスレッドでは「コンテキストスイッチ」がないのかい?
馬鹿馬鹿しい。
340 :デフォルトの名無しさん2011/10/09(日) 17:24:39.53
>>331
コンテキストスイッチなんてPen3以前の頃からあったろ
358 :デフォルトの名無しさん2011/10/09(日) 21:44:23.82
>>341
おれは >>331 じゃないが
80系とかをセンブラで書いても普通にタスクスイッチするよ?
# なければ作るし
割り込みだけは特別扱いで, 全部アセンブラってノリかな
332 :デフォルトの名無しさん2011/10/09(日) 11:05:07.12
退避するレジスタをケチったりしたなあ
341 :デフォルトの名無しさん2011/10/09(日) 17:34:12.67
>>332
どのCPUでどういう処理書いててレジスタの退避けちったの?
普通、一つのスレッドは全てのレジスタを使う可能性が有るし
正数演算系のレジスタは全て使い倒さないと非効率だから
全部退避対象になるでしょ。
スレッド間でレジスタ共有なんてしたら非効率な上に危険。
333 :デフォルトの名無しさん2011/10/09(日) 11:29:46.94
シグナルとスレッドは似たところもあるけど、最大の違いは
「シグナルで割り込まれた側には、割り込んだシグナルハンドラの実行が終わるまで処理が戻ってこない」
ってこと。だから、内部でmutexを使ってるような関数をシグナルハンドラから呼ぶと簡単にデッドロックしてしまう。
mutexすらロクに使えないものを「スレッドの一種」とは言えないよねえ。
335 :デフォルトの名無しさん2011/10/09(日) 13:29:20.72
スレッドはいつ他のスレッドが動いても問題ないというものだからな
割り込みは違うわな
338 :デフォルトの名無しさん2011/10/09(日) 16:47:53.59
いや、スッドレの定義を主張するスレでそ

// プリエンプトってどうやるんだっけね
339 :デフォルトの名無しさん2011/10/09(日) 16:50:22.01
スレッドセーフな関数と割り込みセーフな関数が違う時点で、
全然別物だと気づくはずなんだけどな。
343 :デフォルトの名無しさん2011/10/09(日) 18:13:42.53
アフィニティつってるのにユニプロが馬鹿馬鹿しいだのさー、
Pen2 にコンテキストスイッチがあったとかさー、
再入可能モジュールは色々あるとかさー、
なんか (1+1) は (2) みたいなことを説教されてもリアクションに困るんだよね

そういやレジスタの同時使用数が多いと最適化が裏目に出る CPU なんてのもあったね
346 :デフォルトの名無しさん2011/10/09(日) 18:50:52.18
>>343
で、何が言いたいんだ?
今までの流れだと、お前はコンテキストスイッチの無い
スレッドが存在すると主張してるように見えたんだが。
347 :デフォルトの名無しさん2011/10/09(日) 19:03:07.03
>>346
だから、そうだよ
違うって言いたいのか?
350 :デフォルトの名無しさん2011/10/09(日) 20:01:44.68
>>347
お前の話に一度もコンテキストスイッチの存在しない
実在環境の話が出てない。

あとC++の話に戻すと、割り込みで使えた方法だとして、
スレッドと割り込みは別物なので
スレッドで安全に使えない。
C++が割り込みに対し保証してること=スレッドに対する保証
ではない。
351 :デフォルトの名無しさん2011/10/09(日) 20:36:50.79
>>350
そうか、聞きてえのかw >実在環境
お願いしろよ、言ってやるかも知んねえから

そもそもレジスタ共有は割り込みかスレッドかには関係ねえし
344 :デフォルトの名無しさん2011/10/09(日) 18:24:18.15
アフィニティってCPU 固定するだけだろ
何が言いたいんだ?
アフィニティだろうがコンテキストスイッチは無くならんぞ。
345 :デフォルトの名無しさん2011/10/09(日) 18:34:21.46
>>344
少なくとも減らすためにすることで
減らなかった分はアフィニティと関係ないし
349 :デフォルトの名無しさん2011/10/09(日) 19:51:14.38
C++erの視野の狭さは異常
362 :デフォルトの名無しさん2011/10/10(月) 15:56:56.63
>>349
> C++erの視野の狭さは異常

そういうことじゃないんだよ。

ようやく、ちょっと口を挟める話になったから、
何人もの雑魚が知ったかぶって、見当違いの
レベルの低い話をしているだけ。

こいつらは C++er じゃなくて、ただの雑魚。
363 :デフォルトの名無しさん2011/10/10(月) 15:59:17.97
C++0xスレにも>>362のようなドカタくせぇレスがつくようになったのか
C++もおしまいだな
353 :デフォルトの名無しさん2011/10/09(日) 20:51:45.96
コンテキストスイッチでレジスタの内容がスレッド毎別になるだろ
レジスタ共有するにはわざわざそのレジスタの内容をメモリから復帰しないといけなくて
使い物にならない
354 :デフォルトの名無しさん2011/10/09(日) 21:02:08.86
>>353
言語は使う人が何を考えることができるのかを決めてしまう by禿
もっともお前さんが言ってるのは言語より以前の話なんだが
356 :デフォルトの名無しさん2011/10/09(日) 21:11:01.05
>>354
バカは言語に使われるbyゲイツ
361 :デフォルトの名無しさん2011/10/10(月) 15:43:22.96
>>354
言語以前にレジスタ機械の問題だろ
355 :デフォルトの名無しさん2011/10/09(日) 21:08:56.11
レジスタの内容退避しないで特定の協調スレッドへステートの一部をレジスタ渡しするようなゲテモノを想像してしまった
ここは何スレだ一体
357 :デフォルトの名無しさん2011/10/09(日) 21:11:03.28
レジスタ1個1個退避と復帰やってんのか
ご苦労な事だ
359 :デフォルトの名無しさん2011/10/09(日) 21:58:02.02
タスクスイッチするのはいいけど
レジスタ共有はないな
360 :デフォルトの名無しさん2011/10/09(日) 22:05:01.18
>>359
まぁな
364 :デフォルトの名無しさん2011/10/10(月) 16:01:20.55
volataleは正直組み込み系の人位しか使ってないから誤解が多いのも事実
そしてJavaにも存在して意味合いが違ってたりしてまた混乱に拍車をかける
373 :デフォルトの名無しさん2011/10/10(月) 17:55:47.71
>>364
同期プリミティブ書いてる人も使っているよ。
376 :デフォルトの名無しさん2011/10/10(月) 18:23:02.03
>>373
ソース
387 :デフォルトの名無しさん2011/10/10(月) 19:58:20.71
>>364
入力されたパスワード領域を後で確実にクリアするのにもvolatile使ってなかったっけ?
なんか昔問題になったような気がする。std::secure_fillみたいのがあればいいな。
365 :デフォルトの名無しさん2011/10/10(月) 16:14:22.39
volatileポインタにメモリマップドI/Oのアドレス割り当てたとして、
ハードウェアがその値を変更せずとも、
コンパイラが生成したコードが適当なタイミングで勝手に値を変えても規格合致だと?

本当か?
366 :デフォルトの名無しさん2011/10/10(月) 16:44:58.35
>>365
既にソースが上がってるだろ。
読めよ。
372 :デフォルトの名無しさん2011/10/10(月) 17:55:21.12
>>366
ないぞ
377 :デフォルトの名無しさん2011/10/10(月) 18:30:17.51
>>372
volatileオブジェクトは複数プロセス間で共有する変数として適用可能って書いてるぞ
379 :デフォルトの名無しさん2011/10/10(月) 18:45:10.93
>>377
プロセスであってスレッドでは無い。
367 :デフォルトの名無しさん2011/10/10(月) 17:19:29.34
しかし、あの仕様ではなぁ。

禿の爺さんも、チンポカムウアやエピスカレーの努力も認めるよ。
でもあれは呪文コードだって。


あんな、言語どうでもいいわ、と思えるのは仕方ないことだわ。
禿は禿で読む気にもならんツマラン入門書、書いてるし。



もう、C++終われよ
368 :デフォルトの名無しさん2011/10/10(月) 17:26:43.30
有り難がってるお前らの額に文字が浮かんでるぞ。



「馬、鹿、。。」の文字がw
369 :デフォルトの名無しさん2011/10/10(月) 17:34:17.77
くだらん書き込みでageるなカス
このスレでageてる書き込みはほとんどカスの書き込みだな
370 :デフォルトの名無しさん2011/10/10(月) 17:36:41.69
と、つまらんペーペーのカスが言っております。

どうか、みなさん御容赦を。


こら! 頭下げんか、できそこないのカスがw

374 :デフォルトの名無しさん2011/10/10(月) 18:13:26.71
おいおいvolatileはCとC++は殆ど共通仕様だろ。
何仕様もまともに読めない癖にC++乏してんの。
そういうのは一通りiso読んでからやれや。
378 :デフォルトの名無しさん2011/10/10(月) 18:38:26.19
static volatile、static const volatileオブジェクトはメモリマップドI/Oに適用可能
volatileオブジェクトは複数プロセス間で共有する変数として適用可能
const volatileオブジェクトは別プロセスで変更される変数として適用可能

勝手に値が変わっても良いなんて書いてないが
適用可能≠全環境で適用可能であって
何に適用できるようにするかは処理系依存と書いてあるな
メモリマップドI/Oや共有に使えると処理系のドキュメントに書いてあれば
そのように使って構わないと言う事か
逆に、これら全部に使えもしないような実装でも一応規格合致なのか
そんな糞実装実際問題ないだろうけど
380 :デフォルトの名無しさん2011/10/10(月) 18:50:02.81
>>378
75ページの20 volatileに書いてあるだろ。
以前の値を保持することは保証しない。
382 :デフォルトの名無しさん2011/10/10(月) 19:14:18.50
>>379
プロセス内でも共有されるのだからスレッドでも共有される
それにプロセスってのは単なる例に過ぎない

>>380
どこまで保持するかは処理系依存と書いてある
処理系が保証すれば問題ない
383 :デフォルトの名無しさん2011/10/10(月) 19:28:50.61
>>382
スレッドとプロセスは全然違うだろ、何いってんだ?
384 :デフォルトの名無しさん2011/10/10(月) 19:31:17.39
>>382
処理系依存ってのは、ずっと解ってることじゃん。
385 :デフォルトの名無しさん2011/10/10(月) 19:40:30.12
>>383
388 :デフォルトの名無しさん2011/10/10(月) 20:22:22.52
>>382
メモリが共有されるスレッドと共有されないプロセスじゃ安全性が全然違。。。
381 :デフォルトの名無しさん2011/10/10(月) 19:08:56.21
ちょっと前までは知恵は無くても知識欲だけは有りそうなヤツラが集ってたのに
フリーズに入ってからこのスレもうグダグダ棚
386 :デフォルトの名無しさん2011/10/10(月) 19:51:38.92
プロセス間の場合変数の実体を通して値を共有する事は基本無い。
基本的に共有領域へのポインタによるアクセスになる。
この時ポインタにvolatile修飾が有れば、
共有領域への書き込みは保証される。
ただし、ポインタ自信がどこに有るかは不定。

ちなみにMSのコンパイラだとdata_segを使って
変数の実体を共有できるが、volatileで修飾された変数が
msで使用されることはない。
389 :デフォルトの名無しさん2011/10/10(月) 20:34:10.72
全てのオブジェクトは全てのスレッドで扱えるって規格に書いてあんだろ
390 :デフォルトの名無しさん2011/10/10(月) 21:03:13.88
>>389
何の事だ?どの仕様のどこに書いてある?
それはスレッドの項目に書いてある内容で
volatile固有の話じゃないだろ。
393 :デフォルトの名無しさん2011/10/10(月) 22:22:23.39
逆に全てのスレッドで使えなかったオブジェクトなんてあったか?
400 :デフォルトの名無しさん2011/10/11(火) 01:56:13.65
>>393 コントロールスタックなんてもんはスレッド固有じゃないとまずいんじゃね?
394 :デフォルトの名無しさん2011/10/10(月) 23:22:28.70
プロセスAとプロセスBで共有しているものは
プロセスAのスレッドa1とプロセスBのスレッドb1で共有しているし
プロセスAのスレッドa1とプロセスBのスレッドb2でも共有しているし
つまりプロセスBのスレッドb1とプロセスBのスレッドb2で共有しているということ
395 :デフォルトの名無しさん2011/10/10(月) 23:38:15.86
>>394
バカじゃねぇの。プロセス間通信とスレッド間通信の問題で
一般化された概念がどうとかいってねぇだろ。
401 :デフォルトの名無しさん2011/10/11(火) 03:56:07.50
C++11の新機能をかいつまんでまとめてくれよ。もうついていけてないわw
402 :デフォルトの名無しさん2011/10/11(火) 05:03:57.84
>>401
http://ja.wikipedia.org/wiki/C%2B%2B0x

別についていかなくても、互換性はそれなりに保たれてるから安心して
これまでどおり使っててもいいんだぜ。どうせ C++03 切り捨てて使えるように
なるまでにはもう何年かかかるんだろうし。
403 :デフォルトの名無しさん2011/10/11(火) 05:27:43.32
要するにスレッド間でvolatileを使うな。
仕様じゃ保護されん。
それだけの話。
404 :デフォルトの名無しさん2011/10/11(火) 05:57:41.54
ところでchar16_t/char32_tって嬉しい新機能なん?
406 :デフォルトの名無しさん2011/10/11(火) 07:34:15.91
>>404
linux じゃwchar_t は32bit だし
移植したい人にはべんりでしょ。
407 :デフォルトの名無しさん2011/10/11(火) 07:53:20.87
strlenの代わりにchar_traits<char16_t>::length()なんだよね?
wchar_tと比べてなんか面倒くさそう
てかchar16_tってサロゲートペア考慮してるのかな
409 :デフォルトの名無しさん2011/10/11(火) 08:20:07.76
>>407
一応UTF系はサポートするそうな。
詳しくは仕様書見ろ。
408 :デフォルトの名無しさん2011/10/11(火) 08:07:30.52
は? それ char ってシフトJIS考慮しているのかな?と同レベルの質問だぞ。
410 :デフォルトの名無しさん2011/10/11(火) 09:20:23.89
__STDC_ISO_10646__でない場合、他のUNIX系だとwchar_tはopaqueだったりするしなあ
別に型用意した分混乱少なさそうだけど、実際どういう使われ方になるのかなと
415 :デフォルトの名無しさん2011/10/11(火) 11:00:06.43
>>410
char16_t/char32_tは読み込み用のバッファにして使う時はwstringに変換するとか?
もしいろんなライブラリがwchar_tから移行するなら移行するんだろうけど、どうなんだろ
413 :デフォルトの名無しさん2011/10/11(火) 10:42:00.01
どのコードが未定義動作だって?
414 :デフォルトの名無しさん2011/10/11(火) 10:53:21.95
>>413
ループ脱出を他スレッドから指示するフラグ変数のように、
C++0xではstd::atomicを使うべきところに
単なるvolatile変数を用いているコード。
416 :デフォルトの名無しさん2011/10/11(火) 11:25:42.89
>>414
C++11 のスレッドで使うと data race が発生するから未定義動作、ってことでおk?
それって C++03 までは単に処理系依存なコードじゃないの?
417 :デフォルトの名無しさん2011/10/11(火) 11:41:38.35
>>416
C++03単体で言えば undefined でしょ。仕様書でスレッドについて何も定義していないんだから。
C++03 + pthread みたいに組み合わせてはじめて
処理系依存だとかそういう話ができるわけで
418 :デフォルトの名無しさん2011/10/11(火) 12:29:17.61
>>417
規格で何も定義していないことを指して未定義動作だとか undefined だとか、
明示的に未定義とされた箇所とまぎらわしいからやめてくれ。

C++03 以前の話なら pthread なり何なりの仕様と照らし合わせないと結論は
出ないでしょ。
419 :デフォルトの名無しさん2011/10/11(火) 13:29:29.52
>>418
なんで区別する必要がある?
明示的だろうとそうでなかろうと、
仕様書の範囲外のことなので実装がどうなってようが関知しない
ってことでしょうが。
420 :デフォルトの名無しさん2011/10/11(火) 14:29:01.99
>>419
ライブラリとしてスレッドが実装・利用されていた事実に反すると思ったんだけど、
規格としてはそうなるか。

ごめんよ。
436 :デフォルトの名無しさん2011/10/12(水) 02:16:47.27
>>414がおかしい。
423 :デフォルトの名無しさん2011/10/11(火) 20:07:08.68
C99に書かれている
で、C++11

In general, the semantics of volatile are intended to be the same in C++ as the are in C.
425 :デフォルトの名無しさん2011/10/11(火) 20:19:24.37
>>423
"In general"とか"intended to"の意味わかってる?
>416にもあるように、C++11では明示的に undefined behavior と書かれている。(1.10.21)
431 :デフォルトの名無しさん2011/10/12(水) 01:45:34.40
>>425
> C++11では明示的に undefined behavior と書かれている。(1.10.21)

ここはraceの話で、volatile関係ない。
raceとobservable behaviorを区別しろ。
435 :デフォルトの名無しさん2011/10/12(水) 02:13:01.91
>>431
> ここはraceの話で、volatile関係ない。
そうだよ。data raceの条件にvolatileの有無は関係なく、
そしてdata raceの結果はundefined behaviorだ。
それが何か?
437 :デフォルトの名無しさん2011/10/12(水) 02:18:54.31
>>435
> そしてdata raceの結果はundefined behaviorだ。

data raceの結果って何?
もっと具体的に言える?
424 :デフォルトの名無しさん2011/10/11(火) 20:17:13.77
特記するような事でなければ、
この手は、Cに倣えだからな。
432 :デフォルトの名無しさん2011/10/12(水) 01:47:31.03
でも同じ変数にアクセスする以上
未定義の振る舞いになっちゃうんじゃないの?
433 :デフォルトの名無しさん2011/10/12(水) 01:53:00.20
>>432
> でも同じ変数にアクセスする以上
> 未定義の振る舞いになっちゃうんじゃないの?

何が未定義になると考えたの?
434 :デフォルトの名無しさん2011/10/12(水) 01:55:24.15
「このようなデータレースは未定義の振る舞いをもたらす」
と書いてるから、何がっつーか、やった途端鼻から悪魔が出てくるんじゃないの?
438 :デフォルトの名無しさん2011/10/12(水) 03:01:01.85
なんでそんなに必死なんだ?
undefinedって書いてあるんだから、その通りに解釈すればいいじゃない。
439 :デフォルトの名無しさん2011/10/12(水) 03:26:20.94
>>438
441 :デフォルトの名無しさん2011/10/12(水) 11:27:49.30
C++11ではatomic objectがvolatileであれば、
他スレッドの書き込みが別のスレッドからobservableであることが保証されている。
そういうメモリモデルが採用されている。

APIは定義しないが、メモリモデルだけ定義しておいた。
GCと同じパターン。

そもそもAPIを定義してないのに、上のようなメモリモデルすら定義しないのなら、
規格がスレッドに言及する意味は全くない。
442 :デフォルトの名無しさん2011/10/12(水) 11:54:39.05
>>441
> C++11ではatomic objectがvolatileであれば、
> 他スレッドの書き込みが別のスレッドからobservableであることが保証されている。
それはvolatileの有無に関係なく保証されてる。(1.10.25および29.3.13)
443 :デフォルトの名無しさん2011/10/12(水) 13:57:52.86
>>441
APIも定義されてるでしょ。
memory_order_seq_cstとか。
444 :デフォルトの名無しさん2011/10/12(水) 18:30:13.17
>>441
volatile だけだ書いてあるソースを書け。
447 :デフォルトの名無しさん2011/10/12(水) 21:15:54.20
>>443
標準規格にAPIなんざ無いぞ。
448 :デフォルトの名無しさん2011/10/12(水) 22:27:30.02
>>447
ん?
APIってのが「スレッド間のメモリ可視性に関わるAPI」のことだと思ったから、
それならメモリバリア指定とかがそうだよね、と言ってるんだが。
445 :デフォルトの名無しさん2011/10/12(水) 18:32:24.70
なんでボラ厨は仕様書を読まないの?
ここはC++11という規格のスレだよね。
449 :デフォルトの名無しさん2011/10/12(水) 22:44:43.37
APIってのは特定のプラットフォーム向けの物であって
C++の規格という一般的で汎用的なものにそんなものが混じり込んでるはずはない
450 :デフォルトの名無しさん2011/10/12(水) 22:55:15.58
>>449
普通にあるでしょ、exit の概念とか
ファイル名が DD name なのか DSN なのかとか
454 :デフォルトの名無しさん2011/10/12(水) 23:37:58.37
>>450
Java世代か?
C++以前のすげぇ初歩的な話だが、API(システムコール)ってのは、
OSやらミドルウェアと通信するために用意されてる最底辺の界面を言う。
APIの上位に築かれた関数群はAPIとは言わん。
ライブラリ関数を使わなくとも、外部システムとやりとりはできるが、
APIが存在しない場合は実質無理。APIをラップするライブラリ関数も作れない。
451 :デフォルトの名無しさん2011/10/12(水) 23:13:06.51
すまん。プログラム超初心者でう。
for 文について教えてくれないか・・・・

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
みたいになっちゃってんだよ。これをどうしたらいい?
452 :デフォルトの名無しさん2011/10/12(水) 23:18:56.39
とりあえずこのスレでやる話じゃない
ここはC++11の規格に関して語るスレ
VBの話ならVBのスレに行った方が良いよ

VB.NET質問スレ(Part37)
http://hibari.2ch.net/test/read.cgi/tech/1317448996/
458 :デフォルトの名無しさん2011/10/13(木) 00:15:37.32
>>452.453
ありがとなー

スレさえわからなかったんだよー。
ただ、制御構文を覚えるのが目的で、
Cにも行きたいからさ。
とりあえずVBにいってみるよ。
455 :デフォルトの名無しさん2011/10/12(水) 23:50:47.48
何かを利用する為のインタフェースは全部APIでしょ
別に最下層でないといけないわけではない
WebサービスAPIとか

iostreamもI/O用のAPIだよね
456 :デフォルトの名無しさん2011/10/13(木) 00:04:06.13
WebサービスAPIは、Webとのゲートだから間違っちゃ無い。
それにWebサービスAPIは、それ以上上位の機能は提供しないだろ。

だがiostreamはAPIじゃねえ。
iostreamはWriteFile、ReadFile、read、writeとかのAPIに
乗っかってるただのライブラリ。

Javaなんかは、そもそもAPIが無いのにVMとのAPIと称して
ライブラリとAPIの境がグダグダになってるけどな。
457 :デフォルトの名無しさん2011/10/13(木) 00:12:50.65
「いろんなAPIの定義があります」で良いではないか良いではないか
http://en.wikipedia.org/wiki/Application_programming_interface
462 :デフォルトの名無しさん2011/10/13(木) 00:28:23.06
少なくともWin APIが台頭してた頃ははっきりしてたろ
OSへのアクセス手段 = API
463 :デフォルトの名無しさん2011/10/13(木) 00:38:42.28
スレッドだと green thread ってのもあるから、システムコールが無くても実装できるんですが。
464 :デフォルトの名無しさん2011/10/13(木) 00:49:59.72
attributeって結局pragmaと同程度の実装依存なのか?
カスタムattributeとか作れんのかね。関数がstatic変数を戻り値で返す場合、
参照で受け取ると警告出したりしたいんだけど。
465 :デフォルトの名無しさん2011/10/13(木) 01:10:41.01
attributeはもうほとんど存在意義が無いんだよね
finalとか全部キーワード・・・とは微妙に違うけど、そんな感じのになっちゃったし
466 :デフォルトの名無しさん2011/10/13(木) 01:35:48.69
従前では declarator 中のどの位置に置いた attribute が
何を修飾しているのかなどが曖昧であったり,コンパイラ間で差異ががあったりしたわけで,
そこの部分を統一して文法規則に組み入れたことだけでも十分に意味はあるのでは?
元々の proposal http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2761.pdf
具体的な attribute の semantics に触れているのは10節においてだけで
ほとんどは attribute の syntax について議論しているわけで.
468 :デフォルトの名無しさん2011/10/14(金) 19:02:49.64
謹んでお悔やみ申し上げます。我々は、偉大な逸材を失った
ttp://tech.slashdot.org/story/11/10/13/0328230/dennis-ritchie-creator-of-c-programming-language-passed-away
471 :デフォルトの名無しさん2011/10/15(土) 00:38:06.58
そろそろ値型のWrapperが用意されてもいいだろうに、
いくつ規格を重ねれば登場するんだろう?
完全抽象化Classを親に持つWrapperがあれば、
0階Tensorの実装がスゲェ楽になるのに。
472 :デフォルトの名無しさん2011/10/15(土) 10:01:52.47
カーニハンは蟹飯ってあだながあるけど、リッチーはにちゃんねるでは何って呼ばれてんの?
477 :デフォルトの名無しさん2011/10/15(土) 16:56:16.86
なんか本の虫氏が「日本語の解説本なんて滅べ。そうすりゃプログラマは全員英語読めるようになる」
みたいな事書いてるんだけど、やっぱC++11本は英語で出版するみたいなことにはしないでおくれよ?
1万円くらいまでなら買う気だからさ。(´・ω・`)
634 :デフォルトの名無しさん2011/10/30(日) 13:26:30.85
>>477
英語で読むなら他に選択肢はあるしな。
643 :デフォルトの名無しさん2011/10/30(日) 19:38:22.85
>>634,639,640
くだらん書き込みでageるなカス
644 :デフォルトの名無しさん2011/10/30(日) 21:09:33.77
>>643
くだらん書き込みはお前のだ。
478 :デフォルトの名無しさん2011/10/15(土) 17:02:05.06
ちょっと厨二病をこじらせてるだけだから
ほっとけば治るよ
479 :デフォルトの名無しさん2011/10/15(土) 17:24:39.89
そのうちC++11の解説本が出て、翻訳も出るよ。
メイヤー先生のも結構いいし、増補版出すだろうし。
480 : ◆qQ4COMPILE 2011/10/16(日) 00:40:01.49
メイヤーさん C++11 本だすの?
482 :デフォルトの名無しさん2011/10/16(日) 14:06:38.62
>>480
出してもらわないと困る
C++11が出ると思って長い事C++本買ってないし
481 :デフォルトの名無しさん2011/10/16(日) 13:48:55.07
今更だけど override は頭に書きたかったなあ
行頭で揃ってないといじいじする
483 :デフォルトの名無しさん2011/10/16(日) 14:29:33.63
C++11の本出た所で、まだ準拠率99%超えの実装がないから仕方が無い・・・
484 :デフォルトの名無しさん2011/10/16(日) 18:26:26.28
だれか、禿に哀悼の意を伝える本を準備していろ。

こいつら欧米の技術ばかりをありがたがってパリサイ人の
解釈で得意になって想像力(あえて創造力とはいってない)
かけらもない糞ども全員死ね。


お前ら目障りなんだよ。さっさ消えろ
485 :デフォルトの名無しさん2011/10/16(日) 19:03:46.63
>>484
だれか一行にまとめて。
486 :デフォルトの名無しさん2011/10/16(日) 19:16:08.47
>>484最強伝説。
493 :デフォルトの名無しさん2011/10/16(日) 22:38:18.58
>>484 くだらん書き込みでageるなカス
487 :デフォルトの名無しさん2011/10/16(日) 19:35:37.81
文句あるならてめーが純国産のプログラム言語を作りやがれ
てめーができないことを人に言うな
489 :デフォルトの名無しさん2011/10/16(日) 20:03:13.52
>>487
今使ってるコンピュータがですね、欧米産のノイマン型コンピュータなのですよ。
その理論だと、そこから自作するの?
499 :デフォルトの名無しさん2011/10/17(月) 12:19:18.04
>>489
ほう、おまえさんが使っているコンピュータが欧米の工場で生産されたロットなのか
そのことはプログラム言語の仕様とどう関係があるんだ?
500 :デフォルトの名無しさん2011/10/17(月) 12:54:45.37
488 :デフォルトの名無しさん2011/10/16(日) 19:43:57.51
和算を廃止し、洋算を専ら用ふるべし
と明治政府も言っております
490 :デフォルトの名無しさん2011/10/16(日) 22:17:49.81
国産とか何が嬉しいのか。ナショナリストなのか。ここはコスモポリタン(笑)のスレ。
495 :デフォルトの名無しさん2011/10/16(日) 22:52:37.57
自給可能なエネルギーがあるってのは強い事
アメリカはあれだけ戦争してるのもエネルギーのためで
496 :デフォルトの名無しさん2011/10/17(月) 00:57:34.99
明治ぐらいの時期にほとんどの外来語の対応翻訳日本語がつくられて日本語と英語の違いはあまりなくなっているのに
英語がすばらしいとか連呼しているC++本作者がいると聞いて飛んできました
http://turezurebana2009.blog62.fc2.com/blog-entry-53.html
497 :デフォルトの名無しさん2011/10/17(月) 01:14:53.19
>>496
前半はみんな興味ない話題だろうけど
後半に明治の時期に作られた新語「平和」の話がある
498 :デフォルトの名無しさん2011/10/17(月) 05:45:16.51
>>496
本の虫の人のことなら、あれは古文至上主義だろ
英語はできて当たり前っつってるだけで(俺はそうは思わんけど)
ブログ読んでないのに言うなよ・・・
501 :デフォルトの名無しさん2011/10/18(火) 00:11:34.22
まぁ新しめの概念とか和訳しにくにものは原語使った方が早いな
503 :デフォルトの名無しさん2011/10/18(火) 21:22:25.72
さて、今回大規模に拡張したから
あと5年位したらやっぱり03と同じような
安定版というかマイナーバージョン的な規格が出るんだろうか。
11への本格的な乗り換えはその頃だろうな。
504 :デフォルトの名無しさん2011/10/18(火) 21:25:04.26
vectorの連続性を保証しておいて
data()メンバ関数を追加しなかった03か
505 :デフォルトの名無しさん2011/10/18(火) 22:56:55.44
えー。ただちにshared_ptrとscoped_ptrは使いたいし
ちょっと勘違いするくらいラムダ式を愛用していきたいよ・3・

あと、わりと便利に使えそうなローカル関数。
ローカルクラスのstatic関数より整理されてていい。
506 :デフォルトの名無しさん2011/10/18(火) 23:12:16.70
ローカル関数なんてないが
ラムダ式をそれっぽく使う事は可能だな
507 :デフォルトの名無しさん2011/10/18(火) 23:28:29.94
ポインタの解放忘れってそんな重要か?
ほんとにシビアなら循環参照も確保解放順番も考える必要があるし
そこまで考えてるならなくても書けるよ
509 :デフォルトの名無しさん2011/10/18(火) 23:47:14.72
言語間の単語の輸入はその概念を本当に理解してないと無理だからね
英語じゃないと伝えられないとか言っちゃう奴は理解力と論理構成力がイマイチなことが多い
ちょっと人より英語ができたくらいで俺って頭イイとか勘違っちゃうからこんなことになる
ニートにはニートの理由があるってことだな
高い授業料だと思ってあきらめたら?
512 :デフォルトの名無しさん2011/10/19(水) 06:09:50.51
英語圏におけるラテン語からの翻訳などでも、優れた仕事は芸術とみなされる。
翻訳は常にクソとかいってるのはただの思考停止。
513 :デフォルトの名無しさん2011/10/19(水) 12:01:38.25
ttp://d.hatena.ne.jp/bsdhouse/20090816/1250446250

// 初期値
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
という実行結果は起こり得る。



信じられない
全部並び替えてみたけどそんな結果になる組み合わせなんかなかったよ
514 :デフォルトの名無しさん2011/10/19(水) 13:02:55.64
>>513
常にmemory_order_seq_cstだけ使え。
そうすりゃそんなこと考えなくて済む。
515 :デフォルトの名無しさん2011/10/19(水) 13:15:52.24
>>514
嫌な事、つらい事から目を逸らしてなかったことにするのは日本人の悪い癖ですよ
516 :デフォルトの名無しさん2011/10/19(水) 18:48:41.80
>>513
Thread 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での変更結果が可視になる)

ということは起こりえる。
517 :デフォルトの名無しさん2011/10/19(水) 20:38:41.59
>>516
その可視性っていうのが謎なんですけど
store/loadは排他して主記憶に書きこむ主記憶から読み込むという命令なんじゃないですか?
a.storeが成立した時点でメモリにはa=1と書きこまれていて
その後ほかのスレがどんなタイミングで見ようがそのメモリは1であると思うんだけど…
ああ、量子力学の波動性と粒子性の話を初めて聞いたとき以来の混乱だ
518 :デフォルトの名無しさん2011/10/19(水) 20:41:56.91
>>517
いつThread3/4がThread1/2より後に実行されると錯覚していた?
520 :デフォルトの名無しさん2011/10/19(水) 20:49:50.90
>>518
3/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にならない????
521 :デフォルトの名無しさん2011/10/19(水) 21:26:41.12
>>517
> store/loadは排他して主記憶に書きこむ主記憶から読み込むという命令なんじゃないですか?
違う。排他なんかしない。あくまでatomicityを保証するだけだ。

NUMAとかでは、あるメモリアドレスに対する書き込みが
異なるコアからは別のタイミングで見える、
なんてことは普通にある。
523 :デフォルトの名無しさん2011/10/20(木) 01:47:56.30
>>520
1. 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の順になる
という処理系が存在しないということを規格は保証できない
528 :デフォルトの名無しさん2011/10/20(木) 19:49:01.23
>>523
そんな基地外みたいな動作するマシンがあるわけないだろ
お前の処理系壊れてるよ
532 :デフォルトの名無しさん2011/10/20(木) 21:23:02.32
昔使っていたccNUMA機だと、load linked/store conditionalでアクセスすればOKだった。
atomicさんの中身はほとんどこの類いだろう。

>>528の言う「気違いみたいな動作」しないのばかりだったのは、
cache coherence protocolでかっちり共有メモリの整合性保っていたいにしえの時代。
甘く見積もっても25年くらい前の話。
534 :デフォルトの名無しさん2011/10/20(木) 22:08:35.65
なので結論は >>514 で良いかと
545 :デフォルトの名無しさん2011/10/20(木) 22:56:12.35
>>528
"write atomicity" でググれ。
海外のMLとかでも、未だにちょくちょく議論になることがある。
522 :デフォルトの名無しさん2011/10/19(水) 22:06:15.03
経験よりも歴史を信じるんだ!

つまり、自分のカンよりも先人の知恵の方が上ってことなのよ^^
524 :デフォルトの名無しさん2011/10/20(木) 02:56:59.28
まあ結局自分の低能を棚に上げて
いやぁ〜日本語なんて意味ないわ〜やる気無くしちゃったなぁ〜
みんなボクくらいの英語力身につけるべきだよ(チラッチラッ
ってことだからな
テメーはミサワかとw
525 :デフォルトの名無しさん2011/10/20(木) 03:18:48.74
ただの弱音だろうからほっといてやれよw
英語の規格や文献を調べてそれをまとめるような時間が増えると、
参考文献だけ紹介して同じもの読ませた方が誤解の余地無いんじゃね?とか思うんだろ。

きっと今もどこかの外人がC++11の本を英語で書いていて、同時に
どこかの日本人がC++11の本を日本語で書きながら英語圏の動向を気にしてて、
今このスレではスレッド間のデータの可視性を気にしてる。
ブンガクだね!
526 :デフォルトの名無しさん2011/10/20(木) 07:11:22.12
なんか脈絡の無いレスを付けるヤツが出てきたな。
何が言いたいのか解らんからコテハン付けてくれ。
527 :デフォルトの名無しさん2011/10/20(木) 18:56:56.35
http://www.suri.cs.okayama-u.ac.jp/servlets/APPLICATION.rkt
schemeからc++0xの自動生成

返値をdecltypdeで推定させるようにした。

SICPのコードを変換するとdecltypdeの中にlambdaがどうしても入ってしまう
529 :デフォルトの名無しさん2011/10/20(木) 20:09:34.11
NUMA始めそんな基地外みたいな動作する具体例はいくらでもあるかと
533 :デフォルトの名無しさん2011/10/20(木) 22:01:44.08
マジか最近のCPUって基地外ばっかりなのか
誰が得するためにそんな事になってんだ
539 :デフォルトの名無しさん2011/10/20(木) 22:30:09.77
>>528
ほかの人が言ってるようにNUMAの計算機はThread3,4がそれぞれThread1,2の実行順序を互いにあべこべに観測する可能性がある。まぁそれはおいといて、
「Thread3から見たときにThread1->Thread2の順で
Thread4から見たときにThread2->Thread1の順になる
という処理系が存在する」ということも規格は保証しないよ
もちろん、「俺が持ってる処理系がそうである」ということも規格は保証しない

>>533
得をするのは計算機のユーザーだよ
535 :デフォルトの名無しさん2011/10/20(木) 22:11:58.30
でもLockFreeとかWaitFree書くには必須技術なんだろ
538 :デフォルトの名無しさん2011/10/20(木) 22:23:25.39
>>535の言っているのは知らなきゃ書けないってことだろ。
どういう突っ込みなんだよ。
541 :デフォルトの名無しさん2011/10/20(木) 22:40:45.21
>>538
いえ, lock-free/wait-free に関する話は
メモリオーダーに関する話を完全に脇に置いておいて
sequential consistency を前提にした上で議論できますし,
少なくとも lock-free/wait-free に関して最初に学ぶ段階では
実際そうすべきではないかと.
540 :デフォルトの名無しさん2011/10/20(木) 22:35:16.45
とりあえずatomicならlong longを操作しても割り込まれて上位下位ビットが変になったりはしないんだろ
オレのような底辺にはそれだけわかれば十分だよ。ループ制御とか簡単な部分はatomicで、それ以外は安全重視でmutex使うし
542 :デフォルトの名無しさん2011/10/20(木) 22:41:47.02
C++のmutexはメモリバリアを保証すんの?
544 :デフォルトの名無しさん2011/10/20(木) 22:49:11.52
>>542
(実際にメモリバリアかどうかはともかく)
メモリバリアに相当する機能を持つことは保証されます
543 :デフォルトの名無しさん2011/10/20(木) 22:45:50.24
「最初に学ぶ段階では」
付けてなかった限定を付けるタイプの詭弁ですね。
546 :デフォルトの名無しさん2011/10/20(木) 23:19:20.59
こんなの標準化しないほうが良かったのではないか
わかったつもりで書いた不良コードが世界中で量産されそうだ
550 :デフォルトの名無しさん2011/10/21(金) 16:28:07.85
>>546
その意見も、ある意味もっともだ。

そもそもseq_cst以外のメモリバリアの存在意義はパフォーマンスだけなので、
seq_cstのオーバーヘッドが十分小さくなればそれ以外は不要になる。
だから、そうなるようにCPUメーカーに働きかけようぜ、って言ってる標準委員会メンバーも居る。
548 :デフォルトの名無しさん2011/10/21(金) 07:33:17.47
デフォルトのmemory_order_seq_cstだけ使ってりゃ良いんだから
気にしなくて良い
552 :デフォルトの名無しさん2011/10/21(金) 19:38:41.23
そこに高速化の余地があるなら環境依存性やリスクがあってもコンパイラやプログラマに選択する権利を与えるのがCの規格の方向性だ
554 :1862011/10/22(土) 09:43:30.71
>>552
ハードとソフトは相互依存とは言うが、そのうち、CPUはC Processing Unitの略だと勘違いする奴が出て来そうだな。
555 :デフォルトの名無しさん2011/10/22(土) 09:48:18.55
コンパイラでsec_cst以外を弾くオプションか強制するオプションが必要。仕様に入れとけ
バグだらけになってC++はクソ言語って悪評がつくぞ
そしてみんなC系列にうんざりしてD言語に移動する

557 :デフォルトの名無しさん2011/10/22(土) 09:58:50.26
>>555
>仕様に入れとけ
これ言う人って、自分では提案する勇気もスキルも無いけど、誰かがやってくれたら、俺が主張していた事だって自慢するのかな?
558 :デフォルトの名無しさん2011/10/22(土) 10:01:19.49
>>557
ひねくれてんな
性格矯正おすすめするよ
559 :デフォルトの名無しさん2011/10/22(土) 15:52:12.69
C99と同じ運命になりそうだな。
実装された処理系がほとんど登場しないと・・・
560 :デフォルトの名無しさん2011/10/22(土) 15:55:24.08
ライブラリの要求は高いので空気にはならんだろうね。
constexprもrvalue関係もほぼ必須だし。
561 :デフォルトの名無しさん2011/10/22(土) 16:34:34.38
C99とは違ってVCがそれなりにやる気出してるから大丈夫だろ
まあVC11の実装は期待できないけど
562 :デフォルトの名無しさん2011/10/22(土) 21:15:26.97
そのやる気は変な方向に行ってるけどな
独自の文法を更に追加。
attributeとは何だったのか。
565 :デフォルトの名無しさん2011/10/22(土) 22:32:32.87
そりゃ当然あるだろう
MSの製品にするにはIDEごと対応表明せなあかんし
566 :デフォルトの名無しさん2011/10/23(日) 22:13:23.37
APIを全部Win FXに入れ替えて
アプリケーションはすべて仮想マシン上で動くものとし、
中間コードを優遇してネイティブコードを殲滅させるという
Microsoftの野望は潰えたの?

ネイティブコードが滅んだらC++なんて存在意義なくなっちゃうよねきっと。
おお、キッド。やぁ、マイケル。そんなことナイト2000。
570 :デフォルトの名無しさん2011/10/23(日) 22:27:04.11
普通は楽しもうと思ったら、話題を提供するか、金を払うかくらいじゃないの?
572 :デフォルトの名無しさん2011/10/23(日) 22:29:30.47
>C++なんて存在意義なくなっちゃう
「Windowsにおいては」という限定をつけたらどうだろう?
セキュリティ強化のためにアプリケーションはすべて仮想マシン上でという
発想が本当に実現したとするなら、アンマネージドなコードを書けなくなるので
その環境ではC++の利点性は大幅に激安になると思いに蹴りな久かたに。
580 :デフォルトの名無しさん2011/10/24(月) 10:08:42.18
>>572
Singularityにおいては ならあり得る
あれはドライバも大半がC#で書かれてたし
573 :デフォルトの名無しさん2011/10/23(日) 23:14:41.14
仮想マシンが普及したところで、C++が無くなるつうのも微妙だ。
使える仮想環境が一番多い言語は実の所C++だし。
.Netでも動けばLLVMでも動く。
仮想環境に乗るわけではないが、Java VM に接続し、
クラスライブラリを使うこともできる。
574 :デフォルトの名無しさん2011/10/23(日) 23:44:57.94
環境毎にコンパイルするの面倒だし
マルチOS対応ならJavaが楽だ

C++は速度が必要なケースで生きのこる
577 :デフォルトの名無しさん2011/10/24(月) 00:00:09.38
>>574
Java のライブラリ使って書けば?
C++のテンプレート使えると、生産性が違うぞ。
575 :デフォルトの名無しさん2011/10/23(日) 23:49:20.57
そんなシビアに速度が要求されるような
システムなんて、ほとんどのヤツが開発
したことないくせに、みんなエラそうだな。
576 :デフォルトの名無しさん2011/10/23(日) 23:59:50.81
>>575
ワロス
581 :デフォルトの名無しさん2011/10/24(月) 19:53:32.77
>>575
使ってっから言ってんだよ
582 :デフォルトの名無しさん2011/10/24(月) 23:12:48.12
>>581
何だ、ただのユーザーか
開発しているわけでもないのに偉そうだな
578 :デフォルトの名無しさん2011/10/24(月) 00:52:02.39
みんなgccからclangに移行してやがてObjectiveC++へ・・・とか
まあVCは関係ないけど
584 :デフォルトの名無しさん2011/10/25(火) 00:55:32.97
速度を要求されないプログラマなどいない。
要求されてない奴はプログラマとは呼べない。
586 :デフォルトの名無しさん2011/10/25(火) 03:28:15.96
C++よりCが速くなる場合ってどんな場合なんだろ
587 :デフォルトの名無しさん2011/10/25(火) 03:35:34.42
>>586
ほとんどの場合だろ
今は体感できないけど、昔はオブジェクト指向は遅いって理由でCを使い続けるってのは良くあったらしい
589 :デフォルトの名無しさん2011/10/25(火) 03:59:35.70
>>587
昔の話だ。
590 :デフォルトの名無しさん2011/10/25(火) 04:00:09.53
>>587
C++よりCの方が早い、という意見はよく見かけるけど、単純な数値計算じゃなくて、C++のアルゴリズム相当のものを自作した場合でも成り立つんだろうか?
591 :デフォルトの名無しさん2011/10/25(火) 04:17:34.56
>>590
単純な数値計算なら同じだろうし、C++の<algorithm>に明示的特殊化の可能性まで含めれば
Cより遅くなる理由は無い。

ところでスレ違いじゃないか?
588 :デフォルトの名無しさん2011/10/25(火) 03:38:57.71
あとはその時提供されているC++の実装が、Cの実装に比べて遅かったりとか。
ちょうど今タイミングよくRaymond Chenが似たようなこと言ってるけど。
http://blogs.msdn.com/b/oldnewthing/archive/2011/10/24/10229097.aspx
592 :デフォルトの名無しさん2011/10/25(火) 04:18:32.48
>>588
実行速度の話してなくね?
593 :デフォルトの名無しさん2011/10/25(火) 05:06:14.87
>>592
あまり使われない関数を同じページに押しこむとかのトリックが、当時のC++コンパイラーではうまくできなかった。
もちろん、断っているように、規格じゃなくて実装の話。
594 :デフォルトの名無しさん2011/10/25(火) 05:29:05.93
今Cを使う理由はMISRA Cみたいにシビアに安全性が求められる場合じゃないの
速度面だとケースバイケースじゃん。qsortよりstd::sortの方が速いし
595 :デフォルトの名無しさん2011/10/25(火) 06:36:06.47
>>594
>qsortよりstd::sortの方が速いし
そりゃ、関数ポインタ経由のコールを乱発する qsort() よりもインラインで展開する std::qsort の方が速いに決まってます。
テンプレートをはじめとするインライン展開/メタプログラミングを活用するのなら C よりも早くなります。サイズもでかくなりますが。
601 :デフォルトの名無しさん2011/10/25(火) 13:59:24.92
>>595
比較にインライン関数や関数オブジェクトでなく関数ポインタを指定した場合でも std::sort()
の方が速いです
データの移動が発生する時、std::sort() は operator =() を呼び出すので CPU のワード長で
コピーが行われたりしますが、qsort() 内部のコピー関数はコピー対象のサイズをあらかじめ
知らないので (コンパイル済みなので) 最適化できず、qsort() 呼び出しで指定されたサイズ
をもとにループで 1 バイトずつコピーするからです
また、オブジェクトをコピーする場合に qsort() はコンストラクタやデストラクタを呼ばない
のでデータが壊滅するおそれもあるので、std::sort() を使いましょう

どうせ書くならここまで書け
596 :デフォルトの名無しさん2011/10/25(火) 07:38:13.37
あのコピペを貼って欲しいのか
Cでもマクロ使えば良いだけだろ
599 :デフォルトの名無しさん2011/10/25(火) 08:23:45.07
>>596
そういやなんでPreprocessor-Templateのqsortを標準化しなかったんだろうな
598 :デフォルトの名無しさん2011/10/25(火) 08:16:17.64
マクロは名前の汚染度や安全性を考えると実用には耐えられないね。見苦しい
602 :デフォルトの名無しさん2011/10/25(火) 18:39:27.46
アホかそんな訳あるか
qsortの第三引数は何なんだよ

POD配列のソートならmemcpyを使うから大体qsortの方が早い
611 :デフォルトの名無しさん2011/10/25(火) 21:01:29.42
・vectorとかnewの使用を抑え極力自動変数を使う
・仮想関数と同時に同等のテンプレートを用意
この2点を守ってる限りじゃCより遅くなる事はないな。
Cでも同じ事をしようとすれば、同じアルゴリズムを
生成するコードを書かざるおえん。
613 :デフォルトの名無しさん2011/10/25(火) 22:26:38.57
式テンプレートみたいなテクニックがあるからC++が速度でもCに負ける日は永遠に来ない
614 :デフォルトの名無しさん2011/10/25(火) 22:32:31.49
>>613
注意して書けばな...
むやみに new すると,
キャッシュやページテーブル意識して書いた C の半分以下ののスピード性能になる
617 :デフォルトの名無しさん2011/10/26(水) 00:43:12.33
>>614
newなんてそれほど使わなくないか?
大抵自動変数かコンテナで済むだろ。
615 :デフォルトの名無しさん2011/10/25(火) 22:48:06.83
式テンプレートはコードが難解になるから嫌だ。
そりゃあ、ベクトルの演算程度ならかわいいもんよ。

だが、行列乗算を式テンプレートでコーディングすると呪文の世界が。
それに100×100の行列乗算をやると、いつコンパイルが終わるかわからん。

面白いけど、意外と使い道のないテクニックだと思う。
616 :デフォルトの名無しさん2011/10/26(水) 00:40:11.02
書けはするだろが、自分で書かないだろ。
Blits++とかublasとかおとなしく使えばいい。
618 :デフォルトの名無しさん2011/10/26(水) 00:52:50.10
ラムダ式の名前空間の話なんですが…

int main() {
using namespace std;
[](){ std::cout; }
}

のように、ラムダ式内のcoutにはstd::修飾が必要になるんですが
これはラムダ式の本文内のスコープがmain関数の内側にないってことですよね?
じゃあどこにあるんでしょう。ほわわん。
619 :デフォルトの名無しさん2011/10/26(水) 01:07:09.29
>>618
ttp://ideone.com/OFro6
includeしてないとかそういうオチか?
624 :デフォルトの名無しさん2011/10/26(水) 12:18:21.90
>>621
こいつは何を言っているんだ?
そもそも>>618でコンパイルエラーなんだが
625 :デフォルトの名無しさん2011/10/26(水) 17:32:43.90
シンタックスエラーはともかくとして>>618では動くね。
以下のようにすると「定義されていない識別子です」と出た。

http://ideone.com/TkIjz
(打ち込み途中で setw を削ったので iomanip ヘッダは余計だった;;)

VCはC++11だけでなくテンプレートの準拠度も低いので
それでエラーになっているような気がする。
ちなみに「拡張子を無効にする」 /Za オプションつけてもだめだった。。
621 :デフォルトの名無しさん2011/10/26(水) 02:08:04.64
すいません、くそVisual C++2010です。
くそVisual C++2010のくそ仕様なんでしょうか…
626 :デフォルトの名無しさん2011/10/28(金) 12:54:58.89
C++11が正式になる前に作られたんだからそれに関して準拠度が低いのは仕方ない
627 :デフォルトの名無しさん2011/10/28(金) 22:31:34.47
つか正式リリースする前につくるなよ。
またVC6,0の悲劇を繰り返す気か。
628 :デフォルトの名無しさん2011/10/28(金) 23:14:48.33
そんなこと言ったらgccだって作ってただろ
631 :デフォルトの名無しさん2011/10/29(土) 08:04:11.41
>>628
gccは頻繁に更新あるけど
VCはそんなのないだろ
629 :デフォルトの名無しさん2011/10/28(金) 23:54:39.18
仕様・実装・利用の3者に時間差があるのは止むを得ない。
クラシックモードがあれば移行の時間稼ぎは出来る。
630 :デフォルトの名無しさん2011/10/29(土) 00:44:39.96
理不尽なクレームを付けられるのは毎度のこととはいえMSも大変だな。
632 :使ってないからどうでもいいが、2011/10/30(日) 10:50:06.17
VC++がMS内のスケジュール優先になるのは仕方ないんじゃないの?
MS内のdev系が全部引き摺られてアップデイトしていくわけだし、
WG21のスケジュールに合わせてられないでしょ。
633 :デフォルトの名無しさん2011/10/30(日) 11:01:35.13
オプションで使えるようにして保証外みたい形にして実装するならいいと思うが
デフォルトで中途半端なC++11が使えるのはよろしくない
gccでも-std=c++0xないと使えないってのに
635 :デフォルトの名無しさん2011/10/30(日) 17:53:01.69
英語が出来る頭があるなら、
プログラマなんて底辺職業、やってない
639 :デフォルトの名無しさん2011/10/30(日) 18:41:23.45
>>635
じゃあ英国人や米国人は全員セレブか
じゃあGoogleやMicrosoftのプログラマは底辺か

おまえが底辺なだけ。
636 :デフォルトの名無しさん2011/10/30(日) 17:55:03.14
会話は無理目でもドキュメントの概要掴む位はできてくれないと
コンパイラのエラーメッセージすら読めないバカとかたまにいるからな
637 :デフォルトの名無しさん2011/10/30(日) 17:56:55.28
>>636
コンパイルエラーぐらい、日本語で表示されるだろ。
638 :デフォルトの名無しさん2011/10/30(日) 18:19:05.72
>>636
あれ読んでる奴いるのか?
クリックしてジャンプしてるだけだろ?
640 :デフォルトの名無しさん2011/10/30(日) 19:08:10.12
>>638
涙拭けよ
641 :デフォルトの名無しさん2011/10/30(日) 19:16:56.74
>>638
さすがにそれはない
すぐ分かるエラーならともかく
642 :デフォルトの名無しさん2011/10/30(日) 19:22:20.82
構文エラーとかはエラー読むよりも飛んだほうが早いな。
エラークリックして、何がエラーかわからんときはエラーメッセージ読むなぁ。
647 :デフォルトの名無しさん2011/10/31(月) 14:20:40.75
デフォルトで変数constのコンパイルオプションとライブラリ用の仕組み設定してくんないかな
時既に遅しっぽいけど
653 :デフォルトの名無しさん2011/10/31(月) 23:17:44.36
うむ。conceptsは確かにイイ物だが
HTMLのCSS様にc++のヘッダ・ソースコードとは離れた言語外定義ファイル方式にして
「どうしてもイジリたい奴だけイジれ」みたいな
とにかく面倒じゃないやりかたにして欲しいね
656 :デフォルトの名無しさん2011/11/01(火) 23:01:47.97
XMLのDTDのようなものを定義できるといいなー。ってかんじか?
657 :デフォルトの名無しさん2011/11/01(火) 23:13:57.11
@[ExampleType:<int,long,{void} FunctionA>,<const char*,{size_t},FunctionB>]
とか定義すんのか。何の意味があるんだキモイだけだろ。
660 :デフォルトの名無しさん2011/11/04(金) 19:23:31.12
可愛いと思ってるのは単なる錯覚でそれはキモいC++を使いこなせるという虚栄心からくるもの。
662 :デフォルトの名無しさん2011/11/04(金) 20:10:57.67
C++みたいなキモい言語に対する虚栄心は大体において
構文規則の複雑さを理解したという感情からくるものだと思うけどな。
663 :デフォルトの名無しさん2011/11/04(金) 20:14:34.12
複雑じゃないだろ
そういう意味ではperlとかのほうがよっぽどキモいわ
664 :デフォルトの名無しさん2011/11/04(金) 20:44:21.57
Perlは内向きのキモさというか、キモさを工夫してもキモレベルが人に伝わりづらいのに対して
C++は頑張れば頑張っただけキモくなるし天井知らずでオエッてくるコードが書ける利点がある
668 :デフォルトの名無しさん2011/11/04(金) 23:34:11.66
TMPのような無理矢理感のある方法じゃなくてメタプログラミングのための記述を新たに仕様に入れろってことだろ
template<class T> class X {
if(is_pointer(T)) typedef remove_pointer(T) value_type ;
else typedef T value_type ;
private:
value_type v_ ;
...

みたいな
670 :デフォルトの名無しさん2011/11/04(金) 23:34:31.98
const_exprじゃだめなんか?
672 :デフォルトの名無しさん2011/11/04(金) 23:42:53.75
>>670
型の計算できんの?
673 :デフォルトの名無しさん2011/11/05(土) 14:14:54.49
ところで、暗黙のムーブコンストラクタ・ムーブ代入演算子って
どうなったか、ご存知の方います?

最後まで揺れていたみたいだけど、どういう条件で
暗黙に作られたり、作られなかったりするんだろ

コピーコンストラクタ・コピー代入演算子との兼ね合いはどうなんでしょうか
674 :デフォルトの名無しさん2011/11/05(土) 14:20:18.76
どれだけ時代遅れだよ。
ユーザー定義のコピーがあれば暗黙のムーブは生成されない。
ちなみに、ユーザー定義のムーブがあれば、暗黙のコピーは生成されるが、この挙動はdeprecatedになった。
つまり頼るなってことだ。
675 :デフォルトの名無しさん2011/11/05(土) 14:36:42.66
ちょっと先に情報を仕入れただけのにわかが俺スゲーってスレなのかな?
678 :デフォルトの名無しさん2011/11/05(土) 15:39:31.81
伸びる奴はあらゆる手段(書籍、人、ネット、BBS、他)を使って貪欲に素早やく知識を獲得する。

チンタラと「自分で調べる気」になっていつまでも調べられない愚図はいらない。
680 :デフォルトの名無しさん2011/11/05(土) 17:10:35.68
ま、ぶっちゃけ人柱やるよりもうちょい情報がまとまってから調べ始めたほうが効率いいしな
あせってやるほどのことでもないし
681 :デフォルトの名無しさん2011/11/05(土) 18:34:01.25
こんなスレにいるみなさんは十分意識高いですし
そこは認めたうえで殴り合ってください

686 :デフォルトの名無しさん2011/11/05(土) 20:46:31.37
ローカル変数が、autoだらけになる訳か。B言語に回帰したみたいで胸が熱くなるな。
687 :デフォルトの名無しさん2011/11/05(土) 21:12:15.72
可能な限り auto は反対だな
型が分かりにくくなる
型が大体想像できるイテレータとか
そういうのに限らないと読めたもんじゃないと思う
689 :デフォルトの名無しさん2011/11/05(土) 21:29:08.07
いやいや、特に整数型の式とか、
汎整数昇格やら何やら細かい規則があってややこしいんだぜ
692 :デフォルトの名無しさん2011/11/05(土) 22:23:08.72
>可能な限り従来のポインタとdeleteではなくスマートポインタを使うべき

これやるくらいならJava使ったほうがよくね?
694 :デフォルトの名無しさん2011/11/05(土) 22:41:03.52
Javaのガベージコレクションは高度な遅延処理を含み軽量かつ高速で安全だからじゃないの?
ほとんどのイカしたC++プログラマはJavaレベルのメモリ管理なんて屁でもないけど
ほとんどのイカれたC++プログラマはまともにメモリ管理できないから。
695 :デフォルトの名無しさん2011/11/05(土) 22:56:35.44
C++でメモリを正しく扱えるようになるころにはイカレてるから問題ない
697 :デフォルトの名無しさん2011/11/06(日) 10:45:47.49
なんでJavaを持ち出すのか分からん
Javaを使った方がいい場面なら勝手に使えばいい

スマポ使うことを「これくらいやる」とか言ってる時点でおかしいだろ
生ポを正しく使う方が難しい。というかミスを防げないんだから
699 :デフォルトの名無しさん2011/11/06(日) 11:06:45.44
循環なんて設計段階でわかるだろカス
知的障害の有るメンバが混じってるプロジェクト以外でスマポの循環が問題になったなんて事例は
いままで世界で一度も発生してないという事実を認識しろ
700 :デフォルトの名無しさん2011/11/06(日) 11:34:36.03
スマポの問題じゃなくてshared_ptrで起こり得る問題だろ
優先すべきはunique_ptr。共有したいときにshared_ptrの出番。
循環参照のためにweak_ptrもあるし。

というか生ポとの比較関係ねぇしw

マイクロソフト ワイヤレス ブルートラック マウス Arc Touch Mouse RVF-00006
マイクロソフト ワイヤレス ブルートラック マウス Arc Touch Mouse RVF-00006