Bu kod VS2010'da derlenmiyor. C2440 hatası veriyor: 'argüman': 'A'dan' A & '' a dönüşemez, ancak Standarttaki 12.8p2'ye göre A::A(A&)
geçerli bir kopya oluşturucusudur ve a
, main()
içinde A b = foo(a);
ifadesindeki bir değerdir.Bu kod Standarttaki 12.8p2'ye göre derlenmemeli mi?
#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'de derler ve çalışır. – interjay
Geri dönüş değerini foo() 'dan b'ye kopyalamak için hareket ctor'unu çağırır mı? – Belloc
Evet, buraya bakın: http://ideone.com/Ykwm2Z – interjay