最近看到头文件assert.h和关键字explicit,前者是针对出错吧?它注释说当遇到逻辑上的错误就终止,到底怎么终止?关键字的注释小弟没看懂,能举个例子吗?
class vect { public: explicit vect(int i=0); //不转换类型从int到vect,什么意思难道其它构造函数都转换吗? ...};
最近看到头文件assert.h和关键字explicit,前者是针对出错吧?它注释说当遇到逻辑上的错误就终止,到底怎么终止?关键字的注释小弟没看懂,能举个例子吗?
class vect { public: explicit vect(int i=0); //不转换类型从int到vect,什么意思难道其它构造函数都转换吗? ...};
楼上说的基本正确
关于explicit,我归纳不好,我从msdn上给你摘了,看看他们怎么说
先贴英语,我再给你翻译成汉语
explicit C++ Specific
This keyword is a declaration specifier that can only be applied to in-class 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.
我的翻译:
explicit C++ 约定
此关键字是一个声明约定,只能用于在类内的构造函数的声明。声明了explicit的构造函数
不能用于隐式转换。比如:
class X { public: explicit X(int); //合法 explicit X(double) { //合法 // ... } };
explicit X::X(int) {} //非法,因为声明用在类外了
一个explicit构造函数不能用于隐式转换.它只能用于显式的构造一个对象.比如,用上面的
类的声明:
void f(X) {} void g(int I) { f(i); // 将引起错误 } void h() { X x1(1); // 合法 } 函数调用 f(i)失败,因为没有从int型到X型的隐式转化。
注意: 把explicit应用于多参数构造函数是没有意义的, 因为这样的构造函数不能用于隐
式转换。
谢谢两位,前两天没空上来。