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