在C++中,explicit 是一个关键字,用于修饰类的构造函数,指示编译器不要执行隐式类型转换。这意味着如果构造函数被声明为 explicit,则编译器将不会自动将参数类型转换为类类型,而只会在显式调用构造函数时进行类型转换。
通常情况下,如果一个类的构造函数可以接受一个参数,那么这个构造函数可以被用于隐式地将参数类型转换为类类型,从而创建一个临时对象。这种隐式类型转换在某些情况下可能会导致预期之外的行为,因此可以使用 explicit 来阻止它。
以下是一个示例来说明 explicit 的用法:
class MyClass {
public:
explicit MyClass(int x) {
data = x;
}
int getData() {
return data;
}
private:
int data;
};
int main() {
// 编译错误,因为构造函数是 explicit,不允许隐式类型转换
// MyClass obj = 42;
// 正确,显式地调用构造函数进行类型转换
MyClass obj(42);
// 正确,使用构造函数创建对象
MyClass anotherObj = MyClass(10);
return 0;
}