C++相談室 part122 [無断転載禁止]©5ch.io
■ このスレッドは過去ログ倉庫に格納されています
0033デフォルトの名無しさん
2016/01/25(月) 16:35:28.74ID:MTh5r7jR> 計算式に複数の副作用を含むべきではない。評価順序によって値が変わる可能性がある。
これは、元コードの
vector<shared_ptr<C1>> l = { b->add_C1(1), b->add_C1(0), b->add_C1(2) };
について言ってて、この場合は(initializer listの場合は)左から順にっつーか出現順に評価される事が仕様で決まってるけど(8.5.4.4より)、
これがただの関数呼び出しの場合、つまり
initialize(l, b->add_C1(1), b->add_C1(0), b->add_C1(2));
みたいに書いた場合には左から順に評価されるとは限らない。だから気をつけてねって話。
> listC2の要素数が1つでない場合にlistC1の更新が誤ったものになっている。
これは元コードの
auto& c2 = b->add_C2(0);
c2->set_listC1(l);
の部分だね。add_C2が1度だけ呼ばれるならこのコードでも問題ないけど、
n回呼ばれうる事を考えるとfor文で全体を括った方が良いんじゃない?ってだけの話。
■ このスレッドは過去ログ倉庫に格納されています