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;
}
Выполнение этого кода дает o / p:
A :: A (число), n_ = 10
A :: A (число), n_ = 20
По-видимому, конструктор копирования никогда не вызывается.
class A
{
public:
A(const int n_);
A& operator=(const A& that_);
private:
A(const A& that_);
};
Однако, если мы сделаем его закрытым, произойдет эта ошибка компиляции:
Test.cpp: в функции 'int main ()':
Test.cpp: 21: error: 'A :: A (const A &)' является закрытым
Test.cpp: 38: error: внутри этот контекст
Почему компилятор жалуется, если на самом деле он не использует конструктор копирования?
Я использую gcc версии 4.1.2 20070925 (Red Hat 4.1.2-33)