0

重複の可能性:
この場合、コピー コンストラクターが呼び出されないのはなぜですか?
コピー省略と戻り値の最適化とは?

次のプログラムが出力 "cpy: 0" を生成する理由を誰かに説明してもらえますか (少なくとも g++ 4.5.2 でコンパイルした場合):

#include<iostream>

struct A {

    bool cpy;

    A() : cpy (false) {
    }

    A (const A & a) : cpy (true) {
    }

    A (A && a) : cpy (true) {
    };

};

A returnA () { return A (); }

int main() {

    A a ( returnA () );
    std::cerr << "cpy: " << a.cpy << "\n";
}

この例の一見奇妙な結果を理解しようとしたときに疑問が生じました:定数データメンバーまたは参照メンバーを持つクラスの ctor を移動する

4

1 に答える 1