explicit

抑制构造函数定义的隐式转换。

class B
{
public:
    explicit B(int x = 0, bool b = true);  //默认构造函数
};
void doSomething(B bobject);               //函数,接受一个类型为B的对象
B bobj2(28);
doSomething(28);                           //错误  int->B 没有隐式转换
doSomething(B(28));                        //正确 显示转换

被声明为explicit的构造函数通常比其non-explici更好,因为它禁止了编译器执行非预期(通常也不是被期望)的类型转换。

除非有一个好的理由允许构造函数被用于隐式转换,否则我们将它声明为explicit。

explicit关键字只允许出现在类内,在外部定义时不应重复。

explicit构造函数只能用于直接初始化

B b1(0);     //正确
B b1 = 0;    //错误 只能以直接初始化的形式使用,编译器不会在自动转换过程中使用其构造函数

 

posted on 2016-11-21 11:27  ToBeAprogrammer  阅读(76)  评论(0)    收藏  举报

导航