8
このコードはVS2010ではコンパイルされません。 'A'から 'A &'に変換することはできませんが、標準の12.8p2に従って、A::A(A&)
は有効なコピーコンストラクタであり、はA b = foo(a);
のmain()
の式の左辺値になります。このコードは、標準の12.8p2に従ってコンパイルしないでください。
#include <iostream>
class A
{
public:
int x;
A(int a) { x = a; std::cout << "Constructor\n"; }
A(A& other) { x = other.x; std::cout << "Copy ctor\n"; }
A(A&& other) { x = other.x; other.x = 0; std::cout << "Move ctor\n"; }
};
A foo(A a)
{
return a;
}
int main(void)
{
A a(5);
A b = foo(a);
}
GCC 4.7.2でコンパイルして正常に動作します。 – interjay
foo()の戻り値をbにコピーするには、move ctorを呼び出しますか? – Belloc
はい、ここをクリックしてください:http://ideone.com/Ykwm2Z – interjay