在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
函數。