c++移动构造函数什么时候会被调用?
黄舟
黄舟 2017-04-17 14:32:10
0
3
723
class x{
public:
    x( moveClass&& item) {
        std::cout << 123 << std::endl;
    }
    
    x() = default;
};


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

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

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全員に返信(3)
大家讲道理

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

いいねを押す +0
阿神

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

いいねを押す +0
黄舟

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

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート