class x{ public: x( moveClass&& item) { std::cout << 123 << std::endl; } x() = default; }; int main(){ x(x()); }
如上的代码, 不应该输出123吗, 为什么什么都没有输出... 这种情况到底算调用了哪种构造方法.
123
人生最曼妙的风景,竟是内心的淡定与从容!
コードは を出力すべきではありません。これは関数宣言であり、 を呼び出しません。私の理解では、移動コンストラクターは一時的なコンストラクターとデストラクターの呼び出しを減らすために右辺値で使用され、右辺値を使用してコンストラクターを呼び出すと、移動コンストラクターを呼び出すことができます。 リーリー 上記のコードでは、右辺値を渡しているため、コンストラクターが呼び出されます。 http://stackoverflow.com/ques... ここでは、移動コンストラクターをいつ使用するかについて説明します。 タイトルタイトル! ! !大きな発見でした。情報を確認して自分で実験したところ、 が関数宣言であることがわかりました。 の下に別の を宣言すると、コンパイル時と実行時にエラーが報告されます。以下は私のテスト コードです。これを試してみることもできます。そのため、あなたの行では move コンストラクターが呼び出されません。 リーリー
リーリー コピー代入演算子は次のように記述する必要があります: リーリー
x{x{}} を試してください
コードは を出力すべきではありません。これは関数宣言であり、 を呼び出しません。私の理解では、移動コンストラクターは一時的なコンストラクターとデストラクターの呼び出しを減らすために右辺値で使用され、右辺値を使用してコンストラクターを呼び出すと、移動コンストラクターを呼び出すことができます。 リーリー 上記のコードでは、右辺値を渡しているため、コンストラクターが呼び出されます。 http://stackoverflow.com/ques... ここでは、移動コンストラクターをいつ使用するかについて説明します。 タイトルタイトル! ! !大きな発見でした。情報を確認して自分で実験したところ、 が関数宣言であることがわかりました。 の下に別の を宣言すると、コンパイル時と実行時にエラーが報告されます。以下は私のテスト コードです。これを試してみることもできます。そのため、あなたの行では move コンストラクターが呼び出されません。 リーリー
リーリー コピー代入演算子は次のように記述する必要があります: リーリー
x{x{}} を試してください