explicit
是一个关键字,用于修饰单参数构造函数,以防止隐式类型转换发生。当一个构造函数被声明为 explicit
时,它将只能被显式调用,而不会被隐式调用。
- 代码
#include <iostream>
class MyClass {
public:
explicit MyClass(int x) {
this->x = x;
}
void display() {
std::cout << "Value: " << x << std::endl;
}
private:
int x;
};
int main() {
// case 1: ok
MyClass myClass = MyClass(5);
myClass.display();
// case 2: ok
MyClass obj2(10); // OK
obj2.display();
// case3 :不被允许
// MyClass obj2 = 10; // Error: No implicit conversion allowed
return 0;
}
总结
使用 explicit
关键字可以避免隐式转换带来的潜在问题,使代码更加清晰、可靠。尤其是在构造函数接收单个参数时,应尽量使用 explicit
关键字。