楼上说的基本正确
关于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.