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) 收藏 举报
浙公网安备 33010602011771号