您可以解释为什么以下代码不能编译?与公共分配操作员私人复制ctor时出错
#include <iostream>
using namespace std;
class Foo
{
public:
Foo() { cout << "Foo::Foo()" << endl << endl; }
Foo& operator=(const Foo&) { cout << "Foo::operator=(const Foo&)" << endl << endl; }
private:
Foo(const Foo& b) { *this = b; cout << "Foo::Foo(const Foo&)" << endl << endl; }
};
int main()
{
Foo foo;
foo = Foo();
}
错误我收到:
$ g++ -o copy_ctor_assign copy_ctor_assign.cc && ./copy_ctor_assign
copy_ctor_assign.cc: In function 'int main()':
copy_ctor_assign.cc:10: error: 'Foo::Foo(const Foo&)' is private
copy_ctor_assign.cc:17: error: within this context
注:当我删除私人:关键字代码编译,但拷贝构造函数永远不会被调用。那么为什么它在私密时会犯错?
不知道,如果是重要的,但我使用:
$ g++ --version
g++ (GCC) 4.1.2 20080704 (Red Hat 4.1.2-44)
Copyright (C) 2006 Free Software Foundation, Inc.
FWIW:代码确实co如果分配一个先前创建的Foo对象而不是临时对象,则为mpile。即'foo = bar;'而不是'foo = Foo();'。 – sepp2k 2009-10-13 15:47:35