Questo codice non viene compilato in VS2010. Emette errore C2440: 'argomento': non può convertire da 'A' a 'A &', ma secondo 12.8p2 nello Standard, A::A(A&)
è un costruttore di copia valido e a
è un lvalue nell'espressione A b = foo(a);
in main()
.Questo codice non dovrebbe essere compilato secondo 12.8p2 nello Standard?
#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);
}
Compila e funziona correttamente in GCC 4.7.2. – interjay
Chiama lo spostatore, per copiare il valore di ritorno da foo() a b? – Belloc
Sì, guarda qui: http://ideone.com/Ykwm2Z – interjay