C++ explicit

explicit的使用

C++ 中,按默认规定,只用传一个参数的构造函数也定义了一个隐式转换,比如:

CExample objFour = 12;

执行了隐式转换,等价于:

CExample temp(12); objFour(temp);

注意这个地方调用了编译器为我们提供的默认复制构造函数。如果在构造函数声明中加入关键字 explicit,如下:

explicit CExample(int iFirst, int iSecond = 4);

那么

CExample objFour = 12;

这条语句将不能通过编译。发生隐式转换,除非有心利用,隐式转换常常带来程序逻辑的错误,而且这种错误一旦发生是很难察觉的。

原则上应该在所有的构造函数前加 explicit 关键字,当你有心利用隐式转换的时候再去解除 explicit,这样可以大大减少错误的发生。