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
会避免转换,因此会出现编译错误。
我是 C++ 11 的新手。我发现了显式构造函数这个术语。但是我没有找到关于显式构造函数的任何好的解释。你能解释一下在什么情况下我应该使用显式构造函数吗?
提前致谢。
non-explicitone-argument构造函数可以称为转换构造函数。那是因为它们允许编译器从另一种类型(参数的类型)隐式转换为对象。
这种隐式转换并不总是需要的,可以通过标记构造函数来禁用 explicit
。
显式构造函数是在 implicit type conversion 中不被调用的函数。
例如:
class A {
A( int a ) {}
};
void foo( A a ) {}
在这里调用 foo(1)
或使用任何类型为 int 或可以隐式转换为 int 的变量是完全合法的。这并不总是可取的,因为这意味着 A
可以从整数转换,而不是用整数定义。添加 explicit
会避免转换,因此会出现编译错误。