nrvo

    5

    6答えて

    複数の質問like this oneのためにRVO(とNRVO)の定義の周りに頭を上げることはできません。私にはRVOがコピーコンストラクタを省略していると思われます。今このような場合には12.8.15 によれば、実装が同じオブジェクトを参照する、単に二つの異なる方法省略コピー操作のソースとターゲットを扱い、そのオブジェクトの破壊は、後に発生します2つのオブジェクトが最適化されずに破壊された時代の

    1

    2答えて

    ルック: class MyClass{ public: MyClass(){} MyClass(MyClass &&){} MyClass(const MyClass &){} }; MyClass f1(){ MyClass &&o=MyClass(); /*...*/ return std::move(o);//or retur

    5

    6答えて

    次のコードは、デストラクタ4回呼び出して呼び出しますか? 私は3つのデストラクタコールしかないはずだと考えていました。

    1

    2答えて

    私は移動機能(例えばhttp://www.cprogramming.com/c++11/rvalue-references-and-move-semantics-in-c++11.html)についていくつかの記事を読んでいます。だから私は、次のコードを試してみました: #include <vector> #include <cassert> #include <functional> #in

    4

    1答えて

    我々は、すべてのFooのコピーコンストラクタが副作用を持っている場合でも値のコピーが取られないように Foo returnAFoo() { return Foo(); } が戻り値の最適化でコンパイルされますことを知っています。しかしwill Foo returnAFoo() { Foo f = Foo(); return f; } too? 2番目の

    7

    2答えて

    のは、我々はこのような状況に std::string v_1() { return "name"; } std::string test = v_1(); があるとしましょうRVOは、ここで適用されていますか? RVOを適用するルールの1つが「」であるため、答えは「いいえ」と考えられます。関数が値によってクラスタイプを返し、returnステートメントの式が自動記憶期間を持つ非揮

    7

    3答えて

    関数は、呼び出し元に2つの値を返す必要があります。実装する最良の方法は何ですか? オプション1: pair<U,V> myfunc() { ... return make_pair(getU(),getV()); } pair<U,V> mypair = myfunc(); オプション1.1: // Same defn U u; V v; tie(u,v) = myfunc()