と呼ばれていない、私の環境では移動コンストラクタが呼び出されることはありません:C++移動コンストラクタは、以下の(借り)の例では
#include <iostream>
class MyClass {
public:
MyClass()
{
std::cout << "default constructor\n";
}
MyClass(MyClass& a)
{
std::cout << "copy constructor\n";
}
MyClass(MyClass&& b)
{
std::cout << "move constructor\n";
}
};
void test(MyClass&& temp)
{
MyClass a(MyClass{}); // calls MOVE constructor as expected
MyClass b(temp); // calls COPY constructor...
}
int main()
{
test(MyClass{});
return 0;
}
私の出力は次のようになります。 デフォルトコンストラクタ デフォルトコンストラクタ コピーコンストラクタ
私はXcodeのバージョン9.1を使用して、rvalue参照で移動コンストラクタを呼び出すべきではないのですか?私はここで何が欠けていますか?
ジョン。
'MyClass && temp'は実際には' MyClass b(temp); '(これは名前があるので)という名前のポイントの左辺値です。 rvalueコンストラクタを呼び出すには、move(* MyClass b(std :: move(temp));)を実行する必要があります。 –