簡體   English   中英

為什么在C ++中從指針到bool進行隱式類型轉換?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM