首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

复制构造函数为何不能设置为那个开头的模式

2012-12-29 
复制构造函数为什么不能设置为那个开头的模式。explict就是不让隐转换的。我想不出什么情况设置为这个会出现

复制构造函数为什么不能设置为那个开头的模式。
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;
}

热点排行