explicit 隐式转换与显示转换

来源:互联网 发布:正元恒邦行情分析软件 编辑:程序博客网 时间:2024/06/06 05:26

explicit关键字:用于防止单参数构造函数隐式转换功能(多参数构造函数不会执行隐式转换)

class myDig {    int value;public:    explicit myDig(int n) {        value = n;    }}void doSomething(myDig num); //函数,接受一个myDig参数,函数体不重要,故省略void Test1() {    myDig dig1;    doSomething(dig1); // 正确    myDig dig2(10);       // 正确    doSomething(10); // 错误,myDig不支持隐式转换    doSomething(myDig(10)); //正确,调用**类型转换操作符**进行显示转换(也叫转型,cast), 调用myDig构造函数。}/* * 如果去掉explicit则doSomething(10)正确, 执行了隐式转换 * 过程相当于执行 myDig tmp(10); doSomething(tmp); *  * myDig dig3 = 10; //正确,也是隐式转换。 * /

在Effective c++中

被声明为explicit的构造函数通常比其non-explicit兄弟更受欢迎,因为它们禁止编译器执行非预期(往往也不被期望)的类型转换。

原创粉丝点击