@melponn N3092 の 12.8p34 と 12.8p35 とを組み合わせて読むことで, return に自動変数を指定した場合,戻り値の constructor 呼び出しではまずその自動変数を右辺値とみなしてみりゅりゅんルールとなります.
2010-06-14 21:51:01C++03 の頃から RVO 周りの文言はしょっちゅう読み直しているので, "certain criteria are met" と検索すれば該当箇所が引っかかると覚えてしまっているという.
2010-06-14 21:52:37さすがすぎる・・・ RT @Cryolite: C++03 の頃から RVO 周りの文言はしょっちゅう読み直しているので, "certain criteria are met" と検索すれば該当箇所が引っかかると覚えてしまっているという.
2010-06-14 21:53:50でも RVO が働かない場面もある。例えば return f( x, y ); とか書いた場合はそう。でもこれはコンパイラが勝手に move してくれるんだっけ?
2010-08-06 20:05:08http://togetter.com/li/29274 とかの話ですかね? RT @SubaruG: でも RVO が働かない場面もある。例えば return f( x, y ); とか書いた場合はそう。でもこれはコンパイラが勝手に move してくれるんだっけ?
2010-08-06 20:09:06検証するには、 int f( hoge&& ); と int f( hoge const& ); の両方を用意して、 int g(){ hoge h; return f(h); } ってコードで、どっちが呼ばれるかを試せばいいのかな。末尾関数呼び出しで move してくれるかは。
2010-08-06 20:12:42@melponn そもそも tail call に関する規定自体が、ざっと検索した限り、規格にないんですよね…。
2010-08-06 20:14:35A return statement can involve the construction and copy or move of a temporary object (12.2). ってある。
2010-08-06 20:16:56