李庆远的后代现状:C++中 explicit 关键字作用详解
来源:百度文库 编辑:中财网 时间:2024/05/08 14:14:55
【前言】
今天遇到了个问题,被人问及 explicit 作用的时候,想不起来了。因此重新温习了一下,详细描述如下:
【正文】
简单的说,就是类的构造函数禁止隐式类型转换。先看一看微软大哥是如何说的:
This keyword is a declaration specifier that can only be applied to inclass constructor declarations. Constructors declared explicit will not be considered for implicit conversions. For example:
class X { public: explicit X(int); //legal explicit X(double) { //legal // ... } }; explicit X::X(int) {} //illegal
An explicit constructor cannot take part in implicit conversions. It can only be used to explicitly construct an object. For example, with the class declared above:
void f(X) {} void g(int I) { f(i); // will cause error } void h() { X x1(1); // legal }
The function call f(i)
fails because there is no available implicit conversion from int to X
.
Note It is meaningless to apply explicit to constructors with multiple arguments, since such constructors cannot take part in implicit conversions.
总结一下,大致意思就是:
(1) explicit 只能在类的内部使用,不能在外面声明。
(2)声明了explicit以后,就不允许隐式转换了。
(3)explicit对于多个参数的构造函数无任何意义。