explicit+c++中的作用
时间: 2023-11-11 21:12:46 浏览: 85
在 C++ 中,关键字 `explicit` 用于修饰单参数构造函数,它的作用是禁止隐式转换。当一个构造函数被声明为 `explicit`,它就不能被用于隐式转换。这意味着,在使用该构造函数时,必须显式地调用它,而不能隐式地调用它。
例如,考虑下面的代码:
```cpp
class MyClass {
public:
explicit MyClass(int x) {
// constructor code
}
};
void someFunction(MyClass obj) {
// function code
}
int main() {
MyClass obj1(5); // OK, explicit call
MyClass obj2 = 10; // error, implicit conversion not allowed
someFunction(20); // error, implicit conversion not allowed
someFunction(MyClass(20)); // OK, explicit call
return 0;
}
```
在上面的代码中,`MyClass` 类中的构造函数被声明为 `explicit`,因此不能隐式地将 `int` 类型的值转换为 `MyClass` 类型的对象。在 `main()` 函数中,`obj1` 的初始化使用了显式调用构造函数的方式,因此是合法的;而 `obj2` 的初始化使用了隐式转换的方式,因此会引起编译错误。同样的,`someFunction()` 函数中的参数也不能隐式转换为 `MyClass` 类型的对象,因为它的构造函数被声明为 `explicit`。
阅读全文