[英]Why is there an implicit type conversion from pointers to bool in C++?
考慮具有兩個定義如下的構造函數的foo
類:
class foo
{
public:
foo(const std::string& filename) {std::cout << "ctor 1" << std::endl;}
foo(const bool some_flag = false) {std::cout << "ctor 2" << std::endl;}
};
用字符串文字實例化該類,然后猜測調用了哪個構造函數?
foo a ("/path/to/file");
輸出:
ctor 2
我不了解您,但是我沒有發現編程歷史上最直觀的行為。 我敢打賭,這有一些聰明的原因,我想知道那可能是什么?
用C語言寫這個很常見
void f(T* ptr) {
if (ptr) {
// ptr is not NULL
}
}
您應該創建一個const char*
構造函數。
您正在將char *傳遞給foo構造函數。 它可以隱式轉換為布爾值(所有指針也可以)或std :: string。 從編譯器的角度來看,第一個轉換比第二個轉換“更接近”,因為它比用戶提供的轉換(std :: string(char *)構造函數)更支持標准轉換(即bool指針)。
您混淆了兩個問題。 一個是可以將"blah"
隱式轉換為string
,另一個是可以將const char*
隱式轉換為布爾值。 看到編譯器進行隱式轉換是很合乎邏輯的,該轉換可以最大程度地減少所需的轉換總數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.