誰かがジャンプしてProfile before optimize!
と言う前に、これは単に好奇心の質問であり、this original questionに由来しています。C++コンパイラは未使用の戻り値を `reference`で最適化しますか?
同じオブジェクトを参照して戻ってきた場合、使用しないと最適化されてしまうのですか?たとえば、さまざまな数学関数を持つVector<>
があります(演算子のオーバーロードを使用していないと仮定します)。それを書くの二つの方法:
inline void Vector::Add(const Vector& in) // Adds incoming vector to this vector
OR今
inline Vector& Vector::Add(const Vector& in) // Adds incoming vector to this vector and returns a reference to this vector
Add()
は、戻り値を利用せずに使用されている場合、コンパイラは単に完全復帰を捨てて、それが何を持っているかのように機能がなりません戻り値は?そして、もしそれがinlined
でなければ?
+1もう一つの良い答えはいつものように:) –
これは、コンパイラが呼び出されるたびに関数を処理するのではなく、一度処理することを前提としています。多くの現代のコンパイラは、後者を実行します(または実行するように設定できます)。彼らがそうする理由の1つは、この種の最適化を正確に許可することです。 –
"コンパイラがコードnoをインライン化していない限り" - 現在、LTOですべての非共有オブジェクトコードをインライン化できるので、おそらくyes :-) –