C++中的explicit关键字

来源:互联网 发布:网络销售总监岗位职责 编辑:程序博客网 时间:2024/06/10 03:31
class T{public:        int a;        int b;        T();        ~T();        T(int iFirst, int iSecond = 4);};T():a(0),b(0){}T::T(int iFirst, int iSecond):a(iFirst), b(iSecond){}int main(int argc, char* argv[]){        T q;            //调用T()        T w(12,34);     //调用T(int ,int)        T u(22);        //调用T(int, int)        T l=89;         //调用T(int, int)          //上行代码执行了隐式转换, 89-> T temp(89) 然后 T l =temp,拷贝构造    return 0;}

隐式转换总是在我们没有察觉的情况下悄悄发生,除非有心所为,隐式转换常常是我们所不希望发生的。通过将构造函数声明为explicit(显式)的方式可以抑制隐式转换。也就是说,explicit构造函数必须显式调用。

发生隐式转换,除非有心利用,隐式转换常常带来程序逻辑的错误,而且这种错误一旦发生是很难察觉的。
原则上应该在所有的构造函数前加explicit关键字,当你有心利用隐式转换的时候再去解除explicit,这样可以大大减少错误的发生。

原创粉丝点击