explicit关键之
时间: 2023-05-24 08:06:01 浏览: 98
一、explicit函数
explicit函数用于构造函数中,表示禁止编译器执行隐式类型转换,必须显式地执行强制类型转换。例如:
```cpp
class Foo {
public:
explicit Foo(int x) { m_x = x; }
int m_x;
};
int main() {
// 错误:不能执行隐式类型转换
// Foo f = 2;
Foo f(2); // 正确
Foo g = Foo(3); // 正确
Foo h = static_cast<Foo>(4); // 正确,强制类型转换
return 0;
}
```
二、explicit指定符
C++11标准中,还引入了explicit指定符,用于修饰只有一个参数的构造函数或转换函数(如类型转换运算符),表示禁止编译器执行隐式类型转换,必须显式地执行强制类型转换。例如:
```cpp
struct Foo {
explicit Foo(int x) {}
Foo(const char* str) {}
};
void bar(const Foo&) {}
int main() {
bar(10); // 错误,不能执行隐式类型转换
bar("hello"); // 正确,隐式调用可以转换为const Foo&类型
bar(Foo(20)); // 正确
return 0;
}
```
显式声明explicit函数或使用explicit指定符,可以避免一些预料之外的隐式类型转换,提高程序的安全性和稳定性。
阅读全文