class A
{
public:
A(const int n_);
A(const A& that_);
A& operator=(const A& that_);
};
A::A(const int n_)
{ cout << "A::A(int), n_=" << n_ << endl; }
A::A(const A& that_) // This is line 21
{ cout << "A::A(const A&)" << endl; }
A& A::operator=(const A& that_)
{ cout << "A::operator=(const A&)" << endl; }
int foo(const A& a_)
{ return 20; }
int main()
{
A a(foo(A(10))); // This is line 38
return 0;
}
ejecución de este código da O/P:¿Por qué se utiliza el copiador en este código?
A::A(int), n_=10
A::A(int), n_=20
Al parecer, el constructor de copia no se llama.
class A
{
public:
A(const int n_);
A& operator=(const A& that_);
private:
A(const A& that_);
};
Sin embargo, si lo hacemos privada, se produce este error de compilación:
Test.cpp: In function ‘int main()’:
Test.cpp:21: error: ‘A::A(const A&)’ is private
Test.cpp:38: error: within this context
Por qué se queja el compilador cuando no utiliza realmente el constructor de copia?
estoy usando la versión de gcc 4.1.2 20070925 (Red Hat 4.1.2-33)
FYI Creo que esto todavía está presente en C++ 11 ('12.2/1'). –