戻り値の最適化を信頼
-
22-09-2019 - |
質問
どのように使って行くのです。の戻り値の最適化の?
私は最適化を使用するために近代的なコンパイラを信頼し、または私は常に安全な道を行くと、いくつかの型のポインタを返す必要があります/パラメータ?
戻り値の最適化を行うことがカント任意の既知の例はあります? 戻り値の最適化を実行するためのコンパイラのために非常に簡単だろうと私には思える。
解決
コンパイラの最適化は、(最適化がのの無効になっている場合でも、ほとんどのコンパイラで)有効になっているときはいつでも、
、RVOが行われます。 NRVOが少しあまり一般的であるが、ほとんどのコンパイラは、少なくとも最適化が有効になっているときだけでなく、この最適化を行います。
あなただ右、最適化はコンパイラはほとんど常にそれを行う理由である、実行するためのコンパイラのためにかなり簡単のです。それは「できません」のみの場合は、最適化が適用されないものです:あなたは無名の一時的に戻ったときにRVOにのみ適用されます。あなたが名前のローカル変数を返すようにしたい場合は、NRVOが代わりに適用され、それはコンパイラが実装するのはもう少し複雑ですが、それはなんとかだし、最近のコンパイラはそれで何の問題もない。
他のヒント
は、それが起こることを最高のチャンスを持っているために、あなたがreturn文で直接作成されたオブジェクトを返すことができます[缶誰もがこのイディオムの名前を覚えている - 私は忘れてしまったそれ]:
Foo f() {
....
return Foo( ... );
}
しかし、すべての最適化と同様に、コンパイラは常にそれをしない選択することができます。あなたは価値のあなたを返すために必要がある場合は、その日の終わりに、コンパイラ信頼への代替ではありません - 。ポインタと参照がそれをカットされません。
所属していません StackOverflow