十数年も経過するので、今時のコンパイラなら意識するまでもなく実装している。
特に教科書然としたものなどで例に挙げられるような単純なケースなら確実に最適化がされる。
実際問題どんな状況なのかを調べてみることにした。
test_rvo_nrvo
これは vc だが相変わらず分岐を挟むと残念なことになるようだ。
しかし、gcc と clang で確認を行うと分岐があるにも関わらずきっちり最適化がされる。
---
const correctness について、ここでは関数の戻り型が焦点となる。
const なポインタや参照を返す場合、やはり一抹の不安が残る。
回避するにはコピーを返せばいいのだが、rvo または nrvo が効くか否かが
重要な場面も多々ある。
要はパフォーマンス問題に帰着する。
API の設計に統一性を持たせたいのだが、クロスプラットフォームだと
足を引っ張ってる方に合わせるしかないかな。
---
(追記)
と少し錯乱していたが、vc だけ少し特殊なことをすれば恩恵を授かることができた。
面倒くさい・・・。