关于explicit关键字的问题

explicit是为了防止隐式使用拷贝构造函数。看如下例子:

extern void f(T i);

class T{

        ......  

    public:

        T(int i);

        ......

}

调用函数f:

调用函数f:

   

......

    int x=0;  

    f(x);

    ......

这时会有隐含的类型转换int -> T

......

    int x=0;  

    f(x);

    ......

这时会有隐含的类型转换int -> T

但如果声明构造函数的时候有

 explicit T(int i);

上述代码报错,explicit 阻止了隐含的类型转换。

f(99); //错误
f(Integer(99)); //OK,显式转换
f(static_cast<Integer>(99)); //OK,强制转换

阅读更多
换一批

没有更多推荐了,返回首页