C++ 编程
外观
explicit
关键字用于避免隐式类型转换。
以下是一个[1] 可以用于隐式转换的构造函数的类示例
class Foo
{
public:
// single parameter constructor, can be used as an implicit conversion
Foo (int foo) : m_foo (foo)
{
}
int GetFoo () { return m_foo; }
private:
int m_foo;
};
以下是一个简单的函数,它接受一个 Foo
对象
void DoBar (Foo foo)
{
int i = foo.GetFoo ();
}
以下是 DoBar
函数的调用位置。
int main ()
{
DoBar (42);
}
参数不是一个 Foo
对象,而是一个 int
。但是,存在一个 Foo
构造函数,它接受一个 int
,因此可以使用此构造函数将参数转换为正确的类型。
编译器允许对每个参数只执行一次此操作。
在构造函数之前加上 explicit
关键字可以阻止编译器使用该构造函数进行隐式转换。将其添加到上面的类将导致函数调用 DoBar(42)
出现编译错误。现在需要使用 DoBar(Foo(42))
显式地调用转换。
- ↑ explicit 关键字的含义是什么?,2008