答えて

7

できません。それだけで簡単です。 RVO/NRVOは標準であり、あなたのコードは存在しないことに依存するべきではありません。

+3

RVO/NRVOには標準ではない**(C++ 0x標準、12.8節。クラスオブジェクトのコピーと移動、32項を参照) )。 Standardは単にそのような最適化を許します(g ++とVisualStudioがそれを実装しています)。私はそれに問題はない。しかし、それを無効にするためにいくつかのスイッチを持つことはいいです。多分教育目的のために。ありがとう、それはもっとはっきりしています:) – Goran

+0

@ゴラン:もしスタンダードが明示的に許可していれば、スタンダードです。 – Puppy

+2

許可!=必須です。このように、それは標準の一部ではなく、単に標準に矛盾しないでしょう。 –

1

変数をvolatileと定義して、おそらく問題を解決してください。そうでない場合は、コードを送信してください...

+0

+1;これはちょうどランダムな推測です(そして、それがダウンボットに値する)ので、 'return my_volatile_variable;'はRVOを無効にします。 (C++ 11§12.8/ 31 item 1.) – Potatoswatter

+0

@Potatoswatter:なぜ私の答えは単なるランダムな推測であると思ったのか不思議です。私の答えの「多分」は、本当の問題が何であるか分からなかったので、私はこの答えが分からないことを意味しました。 IMHO、この質問はhttp://meta.stackexchange.com/questions/66377/what-is-the-xy-problem – Malkocoglu

+0

の静脈にあります。ああ、申し訳ありません。私は彼らがあなたを落胆させた理由だと思います。 – Potatoswatter

0

この最適化を無効にする理由は決してありません。あなたは何を達成しようとしていますか?悪質な副作用がなくても、ビルドの実行をより速くデバッグするのに役立ちます。また、RVOまたはNRVOに依存するコードがデバッグおよびリリースで同じように機能するようにします。

+11

私は1つ(少なくとも私にとって)非常に重要な理由を考えることができます:教育!コンパイラがそれらを省略したときに、コンストラクタ、移動/コピーコンストラクタ、デストラクタをどのように説明しますか?私はg ++にこのようなオプションをサポートすることに非常に感謝しています。 – Goran

+0

返された値の存続期間を理解するためには無効にする必要があります。一時的に作成されないため、今すぐ理解できません。 – Zebrafish

関連する問題