C++ 的关键字 explicit
On 2011-03-04 23:25:00 By SoliC++ 的关键字 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 ) );
Except where otherwise noted, content on this site is licensed under a
Creative Commons Attribution 4.0 International license
.