Application of C++ Explicit Constructor
我是C++ 11的新手。我发现这个术语是显式构造函数。但是,对于显式构造函数,我没有找到任何好的解释。您能解释一下在什么情况下我应该使用显式构造函数吗?
提前谢谢。
- explicit构造函数防止将该构造函数用于隐式类型转换。
- 你到底在问什么?尤其是在阅读了一些文档(如en.cppreference.com/w/cpp/language/explicit)之后
- 实际上,move和copy构造函数通常应该是隐式的。
- @你能举个例子吗?
- @沙纳吉·埃多克斯1〔1〕。
- 我看不到一个好的explicit复制构造函数(包括move构造函数)的用例。通常,它是在转换构造函数(即接受不同类型参数的构造函数),其中隐式/显式区别非常重要。
非显式单参数构造函数可以称为转换构造函数。这是因为它们允许编译器从另一个类型(参数的类型)隐式转换为对象。
这种隐式转换并不总是需要的,可以通过标记构造函数explicit来禁用。
- 回想起来,最好用"implicit"关键字明确地要求隐式会话。
显式构造函数是在隐式类型转换中不被调用的函数。
例如:
1 2 3 4 5
| class A {
A( int a ) {}
};
void foo( A a ) {} |
调用foo(1)或使用任何int类型的变量或可以隐式转换为int的变量完全合法。这并不总是可取的,因为这意味着A可以从整数转换,而不是用整数定义。添加explicit将避免转换,因此会产生编译错误。