C++中两个复制构造函数调用之间的区别是什么?

J.D*_*Doe 5 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;  
}  
Run Code Online (Sandbox Code Playgroud)

为什么Foo foo3 = foo1;无法编译,两个复制构造函数调用之间有什么区别?
ps:我的编译器工具是GCC4.8.2

son*_*yao 5

Foo foo2(foo1);直接初始化.Foo foo3 = foo1;复制初始化.他们之间的区别是

复制初始化比直接初始化更不容许:显式构造函数不转换构造函数,也不考虑复制初始化.

复制构造函数Foo声明为explicit,在复制初始化时不予考虑.