跳转到内容

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)) 显式地调用转换。

参考资料

[编辑 | 编辑源代码]
  1. explicit 关键字的含义是什么?,2008

华夏公益教科书