查看以下代码:
class Foo
{
public:
Foo(){}
explicit Foo(const Foo &){}
};
int main()
{
Foo foo1;
Foo foo2(foo1);
Foo foo3 = foo1; //can not compile
return 0;
}
为什么Foo foo3 = foo1;
无法编译,两次拷贝构造函数调用之间有什么区别?
ps:我的编译器工具是GCC4.8.2
答案 0 :(得分:5)
Foo foo2(foo1);
是direct initialization。 Foo foo3 = foo1;
是copy initialization。它们之间的区别是
复制初始化比直接初始化要宽松:显式构造函数不会转换构造函数,因此不会考虑进行复制初始化。
Foo
的副本构造函数被声明为explicit
,在副本初始化中不考虑。