explicit 是一个关键字,主要用于 C++ 语言中,用于修饰类的构造函数。它的作用是防止编译器进行隐式的类型转换,从而避免潜在的错误或歧义。
作用:
禁止隐式转换:
当构造函数被声明为explicit时,编译器不会自动调用该构造函数进行隐式类型转换,必须显式地调用构造函数。避免意外的行为:
某些情况下,隐式转换可能导致逻辑错误或难以发现的 bug。explicit强制要求程序员明确表达意图。
示例:
class MyClass {
public:
explicit MyClass(int x) {
// 构造函数逻辑
}
};
void func(MyClass obj) {}
int main() {
// MyClass obj = 10; // 错误:explicit 禁止隐式转换
MyClass obj(10); // 正确:显式调用构造函数
func(MyClass(20)); // 正确:显式转换
// func(30); // 错误:不能隐式转换 int 到 MyClass
return 0;
}适用场景:
单参数构造函数:
如果构造函数只有一个参数(或多个参数但有默认值),通常建议用explicit避免隐式转换。避免歧义:
例如std::vector的构造函数explicit vector(size_type count)防止误写为vector<int> v = 5。