C++ 的关键字 explicit

如果一个类的构造函数被声明为 explicit ,那以此构造函数进行的隐式类型转换将被阻止。要想进行此种类型转换,必须显式地调用此构造函数。


class foo { public: explicit foo( int a ) : a_( a ){ } int a_; }; int bar( const foo & f ) { return f.a_; } // 失败。因为声明为explicit的构造函数禁止了int到foo的隐式类型转换; bar( 1 ); // 成功。显式地调用了声明为explicit的构造函数; bar( foo( 1 ) ); // 成功。通过显示的类型转换调用了声明为explicit的构造函数; bar( static_cast( 1 ) ); // 成功。显式地调用了声明为explicit的构造函数, // 但注意此处有一个从float到int的隐式类型转换 bar( foo( 1.0 ) );
Creative Commons License Except where otherwise noted, content on this site is licensed under a Creative Commons Attribution 4.0 International license .