C++的explicit关键字

来源:互联网 发布:php 爬虫 解析html 编辑:程序博客网 时间:2024/05/19 03:43

C++中一个参数的构造函数(或者除了第一个参数以外其余参数都有默认值的多参构造函数),承担了两个角色。一是个构造器,二是个默认且银行的类型转换操作符。

所以有时候我们写下如 AAA = XXX,这样的代码,切恰好 XXX的数据类型正好是 AAA 单参数构造器的参数类型,这时候编译器就自动调用这个构造器,创建一个 AAA 的对象。

这样看起来很酷,很方便。但在某些情况下(见下面权威的例子),却违背了我们(程序员)的本意。这时候就要在这个构造器前面加上explicit修饰,指定这个构造器只能被明确的调用/使用,不能作为类型转换操作被隐含的使用。

解析:
explicit构造函数是用来方式隐式转换的,请看下面的代码:

class Test1{public:    Test1(int n)    {        m_nNum = n;    }//普通构造函数privite:    int m_nNum;};class Test2{public:    explicit Test2(int n)    {        m_nNum = n;    }//explicit是(显示)构造函数private:    int m_nNum;}//....void main(){    Test1 t1 = 12;//隐式调用其构造函数,成功    Test2 t2 = 12;//编译错误,不能隐式调用其构造函数    Test2 t2(12);//显示调用成功    return ;}

一些疑问:良好的编码习惯里应该都只显示的调用对象的构造函数,所以这种 强制的显示调用构造函数的限制具体有什么用呢?

0 0
原创粉丝点击