NRVO(Named Return Value Optimization)が適用されたか判定するマクロ 注: この記事は連休中にボケた頭を戻すため書いたものなので、あまり役には立つ記事ではありません。 C++で関数/メソッドでオブジェクトを返したい時がありますが、以下のようにオブジェクトを返す関数/メソッドでは、コピーにかかるコストが気になります。C言語をそれなりにやってきた人であれば、このように、(Tのサイズが大きいものだったとして)大きいデータを値渡しで返すようなことは普通しません。ただ、C++ではRVO(Return Value Optimization)という最適化が働き、呼び出し元(main)のt変数が直接初期化されるので、コピーは発生しません。このため、コピーコストを気にせずオブジェクトをどんどん返していけます。 RVOの例 T exampleRVO() { return T(