小さなコード スニペットを次に示します。
class A
{
public:
A(int value) : value_(value)
{
cout <<"Regular constructor" <<endl;
}
A(const A& other) : value_(other.value_)
{
cout <<"Copy constructor" <<endl;
}
private:
int value_;
};
int main()
{
A a = A(5);
}
出力は「通常のコンストラクター」(RHS の場合) に続いて、LHS の「コピー コンストラクター」になると想定しました。だから私はこのスタイルを避け、常にクラスの変数を として宣言しましA a(5);
た。しかし、上記のコードで驚いたことに、コピー コンストラクターは呼び出されません (Visual C++ 2008)
この動作がコンパイラの最適化の結果なのか、それとも C++ の文書化された (および移植可能な) 機能の結果なのか、誰にもわかりませんか? ありがとう。