C ++显式构造器的应用
这个问题在这里已经有了答案:
显式构造函数是一个函数,它不会在隐式类型转换中被调用。
例如:
class A {
A( int a ) {}
};
void foo( A a ) {}
调用foo(1)
或使用int类型的任何变量或可以隐式转换为int类型的函数完全合法。 这并不总是可取的,因为这意味着A
可以从整数转换,而不是用整数定义。 添加explicit
会避免转换,因此会给你一个编译错误。
一个非显式的单参数构造函数可以被称为转换构造函数。 这是因为它们允许编译器将其他类型(参数的类型)隐式转换为对象。
这种隐式转换并不总是需要的,并且可以通过explicit
标记构造函数来禁用。