复制构造函数为什么不能设置为那个开头的模式。
explict
就是不让隐转换的。
我想不出什么情况设置为这个会出现影响。
大家可以举例子说明下吗。
[解决办法]
class A
{
public:
A() {}
explicit A( const A& ) {}
};
A a;
A b = a;
b的创建会产生A的copy-ctor的调用,但这是一种“单参数构造函数自动类型转换”的方式。你加上了explicit也就禁止了这种转换。所以对
A b = a;
编译器会报错。修改方式有两种:
1)去掉explicit
2)改为A b(a);
[解决办法]
三楼正解。总结如下:
class A
{
public:
A() {}
explicit A(const A&) {}
};
int main()
{
A a;
// 单参数构造函数自动类型转换形式,加上explicit禁止了这种转换
// class 'A' : no copy constructor available
// or copy constructor is declared 'explicit'
// A b = a;
A b(a);
return 0;
}