在C++中,关键字explicit
用于修饰单参数构造函数,用来防止隐式转换。当单参数构造函数使用了explicit
关键字修饰后,该构造函数只能被显式调用,而不能在隐式转换中调用。
下面是使用explicit
关键字的示例:
class MyInt {
public:
explicit MyInt(int num) : value(num) {}
int getValue() const {
return value;
}
private:
int value;
};
void printInt(const MyInt& num) {
std::cout << num.getValue() << std::endl;
}
int main() {
MyInt myNum(5); // 直接调用构造函数
printInt(myNum); // 隐式转换为MyInt对象,通过显式调用的方式传递给printInt函数
// printInt(5); // 错误,不能隐式转换为MyInt对象
printInt(MyInt(10)); // 可以显式地调用构造函数
return 0;
}
在上面的例子中,MyInt
类有一个带有explicit
关键字的单参数构造函数,这意味着不能将一个整数隐式转换为MyInt
对象。只有通过显式调用构造函数的方式,才能创建MyInt
对象。在main
函数中,可以看到使用隐式转换调用printInt
函数是错误的,而通过显式调用构造函数的方式可以传递MyInt
对象给printInt
函数。