关于move:C ++显式构造函数的应用

Application of C++ Explicit Constructor

本问题已经有最佳答案,请猛点这里访问。

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

提前谢谢。


非显式单参数构造函数可以称为转换构造函数。这是因为它们允许编译器从另一个类型(参数的类型)隐式转换为对象。

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


显式构造函数是在隐式类型转换中不被调用的函数。

例如:

1
2
3
4
5
class A {
   A( int a ) {}
};

void foo( A a ) {}

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