请看以下代码:
class Foo
{
public:
Foo(){}
explicit Foo(const Foo &){}
};
int main()
{
Foo foo1;
Foo foo2(foo1);
Foo foo3 = foo1; //can not compile
return 0;
}
Run Code Online (Sandbox Code Playgroud)
为什么Foo foo3 = foo1;无法编译,两个复制构造函数调用之间有什么区别?
ps:我的编译器工具是GCC4.8.2
class Foo
{
public:
Foo(){}
private:
Foo(const Foo &);
};
Foo f();
Foo f1 = Foo();
Run Code Online (Sandbox Code Playgroud)
我发现当我Foo(const Foo &)向私人宣布时,Foo f1 = Foo();不会编译.所以我认为Foo f1 = Foo(); 只是调用复制构造函数,但当我将我的代码更改为:
class Foo
{
public:
Foo(){}
Foo(const Foo &){std::cout<<"Foo(const Foo &)";}
};
Foo f();
Foo f1 = Foo();
Run Code Online (Sandbox Code Playgroud)
它没有打印任何东西.那么两个初始化有什么区别:Foo f(); Foo f = Foo()?