举一个具体例子explicit是一个关键字,用于修饰单参数构造函数。它的作用是禁止隐式类型转换,只允许显式调用该构造函数。
时间: 2024-10-09 13:13:46 浏览: 33
你必须知道的C#的25个基础概念
当你在一个类中有单个无参构造函数,并且希望防止它在创建新对象时通过隐式的类型转换自动被调用,这时可以使用`explicit`关键字。例如:
```cpp
class MyClass {
public:
// 使用explicit修饰的无参构造函数
explicit MyClass() {} // 现在只有明确地写`MyClass()`才会调用这个构造函数
private:
// 如果不加explicit,int会被隐式转换成MyClass对象
MyClass(int value) : value_(value) {}
int value_;
};
// 下面的行会因为explicit而失败,需要显式调用构造函数
int main() {
MyClass obj; // 这里不会直接使用默认构造函数,需要显式写:MyClass myObj;
// 显式调用带参数的构造函数是可以的
MyClass myObj(42);
return 0;
}
```
在这个例子中,如果不加`explicit`,试图将整数赋值给`MyClass`就会触发隐式类型转换,但是加上`explicit`后,就必须明确指定`MyClass()`来进行初始化。
阅读全文