検索

ホームページ  >  に質問  >  本文

c++移动构造函数什么时候会被调用?

class x{
public:
    x( moveClass&& item) {
        std::cout << 123 << std::endl;
    }
    
    x() = default;
};


int main(){
    x(x());
}

如上的代码, 不应该输出123吗, 为什么什么都没有输出... 这种情况到底算调用了哪种构造方法.

黄舟黄舟2806日前665

全員に返信(3)返信します

  • 大家讲道理

    大家讲道理2017-04-17 14:34:10

    コードは を出力すべきではありません。これは関数宣言であり、 を呼び出しません。私の理解では、移動コンストラクターは一時的なコンストラクターとデストラクターの呼び出しを減らすために右辺値で使用され、右辺値を使用してコンストラクターを呼び出すと、移動コンストラクターを呼び出すことができます。 リーリー 上記のコードでは、右辺値を渡しているため、コンストラクターが呼び出されます。 http://stackoverflow.com/ques... ここでは、移動コンストラクターをいつ使用するかについて説明します。 タイトルタイトル! ! !大きな発見でした。情報を確認して自分で実験したところ、 が関数宣言であることがわかりました。 の下に別の を宣言すると、コンパイル時と実行時にエラーが報告されます。以下は私のテスト コードです。これを試してみることもできます。そのため、あなたの行では move コンストラクターが呼び出されません。 リーリー

    返事
    0
  • 阿神

    阿神2017-04-17 14:34:10

    リーリー コピー代入演算子は次のように記述する必要があります: リーリー

    返事
    0
  • 黄舟

    黄舟2017-04-17 14:34:10

    x{x{}} を試してください

    返事
    0
  • キャンセル返事