- 33 名前:デフォルトの名無しさん mailto:sage [2016/01/25(月) 16:35:28.74 ID:MTh5r7jR.net]
- >>31
> 計算式に複数の副作用を含むべきではない。評価順序によって値が変わる可能性がある。 これは、元コードの 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文で全体を括った方が良いんじゃない?ってだけの話。
|

|