c++ explicit 讲解
时间: 2023-08-28 20:05:54 浏览: 194
在 C++ 中,`explicit` 是一个关键字,用于修饰单参数的构造函数,它的作用是禁止隐式类型转换。
在默认情况下,C++ 允许编译器进行一定程度的隐式类型转换,例如将一个参数传递给一个接受相应类型参数的函数或构造函数。然而,如果你希望禁止这种隐式类型转换,可以使用 `explicit` 关键字显式声明构造函数。
下面是一个使用 `explicit` 的简单示例:
```cpp
class MyClass {
public:
// 使用 explicit 关键字显式声明构造函数
explicit MyClass(int value) : m_value(value) {}
int getValue() const {
return m_value;
}
private:
int m_value;
};
void foo(const MyClass& obj) {
int value = obj.getValue();
// 在这里使用 MyClass 对象
}
int main() {
// 使用 explicit 构造函数进行对象创建
MyClass obj1(10);
// 错误!不能进行隐式类型转换
// MyClass obj2 = 20;
// 正确!显式地进行类型转换
MyClass obj2 = MyClass(20);
foo(obj1);
return 0;
}
```
在上述示例中,`MyClass` 类有一个带有 `int` 参数的构造函数,并使用 `explicit` 关键字进行了显式声明。这意味着我们只能使用显式方式创建 `MyClass` 对象,而不能通过隐式类型转换来创建对象。因此,在 `main` 函数中,我们可以直接使用 `MyClass obj1(10)` 来创建对象,但不能使用 `MyClass obj2 = 20` 这样的隐式类型转换方式。
通过使用 `explicit` 关键字,可以避免一些意外的隐式类型转换,提高代码的可读性和明确性。它通常应用于那些可能导致意料之外行为或潜在错误的构造函数上。
阅读全文