C++显式构造函数的应用

Application of C++ Explicit Constructor

我是 C++ 11 的新手。我发现了显式构造函数这个术语。但是我没有找到关于显式构造函数的任何好的解释。你能解释一下在什么情况下我应该使用显式构造函数吗?

提前致谢。

non-explicitone-argument构造函数可以称为转换构造函数。那是因为它们允许编译器从另一种类型(参数的类型)隐式转换为对象。

这种隐式转换并不总是需要的,可以通过标记构造函数来禁用 explicit

显式构造函数是在 implicit type conversion 中不被调用的函数。

例如:

class A {
   A( int a ) {}
};

void foo( A a ) {}

在这里调用 foo(1) 或使用任何类型为 int 或可以隐式转换为 int 的变量是完全合法的。这并不总是可取的,因为这意味着 A 可以从整数转换,而不是用整数定义。添加 explicit 会避免转换,因此会出现编译错误。