C ++中的两个副本构造函数调用之间有什么区别?

时间:2018-06-28 03:11:29

标签: c++ initialization

查看以下代码:

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

1 个答案:

答案 0 :(得分:5)

Foo foo2(foo1);direct initializationFoo foo3 = foo1;copy initialization。它们之间的区别是

  

复制初始化比直接初始化要宽松:显式构造函数不会转换构造函数,因此不会考虑进行复制初始化。

Foo的副本构造函数被声明为explicit,在副本初始化中不考虑。