rvo

    16

    4答えて

    タプル/タイの場合の戻り値の最適化を見ています。私が観察した動作は期待通りではありません。以下の例では、移動セマンティクスがキックインされることを期待していますが、残っているコピー操作が1つあります。最適化で下からの出力は次のようになります。 Test duo output, non_reference tuple Default constructor invoked Parameter c

    5

    6答えて

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

    4

    1答えて

    私は右辺値に関する情報をたくさん読んで、私は理解し何から++> = 11 Cでのローカル変数を返すきただけで、前方/移動を使用していない、値で返すとメソッドシグネチャに& &を追加していない」ということですコンパイラはそれを最適化します "。 さて、私はそれが起こるたい: #include <sstream> std::stringstream GetStream() { std::

    35

    2答えて

    多くの場合、関数からローカルを返すときにRVOが起動します。しかし、std::moveを明示的に使用するとRVOが発生しない場合でもRVOは可能な限り適用されます。しかし、そうではないようです。 #include "iostream" class HeavyWeight { public: HeavyWeight() { std::cout << "ctor

    4

    1答えて

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

    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()

    5

    6答えて

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

    8

    4答えて

    は、私は同じクラスのいくつかのメンバ関数で、私はオブジェクトを返すコードを今すぐコピーコンストラクタは、プライベートとが実装されていないクラス(オブジェクトコピー不能を作るために) class NonCopyable { // whatever private: NonCopyable(const NonCopyable&); void operator=(const No

    5

    2答えて

    大きなベクトルを設定する関数の戻り値としてauto_ptrを使用すると、関数がソース関数になります(内部auto_ptrが作成され、 const auto_ptr)。しかし、データにアクセスするためには、auto_ptrを削除する必要があるため、この関数をSTLアルゴリズムで使用することはできません。私が推測する良い例は、サイズNのベクトルのフィールドであり、各ベクトルは100の成分を有する。 W

    5

    1答えて

    はのは、私が移動constructorとoperator=(Foo&&)でstruct Fooを持っているとしましょう、と私はデータメンバとしてそれを使用:場合に Foo f() { Foo foo; //code return foo; } struct Boo { Foo foo; Boo() { foo = f();//1 foo