簡體   English   中英

未調用nullptr的重載函數

[英]Overloaded function with nullptr not called

我有以下幾點:

void func(const char *p) { std::cout << p << "\n"; }
void func(std::nullptr_t p) { std::cout << "<null>\n"; }

int main()
{
    func("test");
    char *p=nullptr;
    func(p);
    func(nullptr);
    return 0;
}

func("test")總是被調用。 注釋func(p) ,將func(nullptr) ,但未注釋func(p)將不會調用它們。 為什么不? 為什么帶有p == nullptr的func(p)不調用func(nullptr),而是調用func(const char *)?

[編輯]
根據響應,我的結論是基於參數的類型調用func(...),並且p的類型為char* ,將p的值設置為nullptr不會更改類型,並且不會更改該func(char * )稱為-接受的答案也可以解釋。

現在,您的問題的確切內容實際上深深地陷入了混亂,因為您看到事物“未被調用”的原因是您的原始代碼試圖流式傳輸空字符指針,該指針在流上設置了錯誤標志,並且防止它再次工作,直到糾正為止。 無論如何,這是答案的要點:


您不能將nullptr分配給char*並期望char*神奇地轉換為std::nullptr_t 您的指針仍然是char* ,並且其值為 nullptr

std::nullptr_t的好處在於,給定空指針文字其自身獨特的類型,該類型不會轉換為整數類型。 這並不意味着您可以期望在指針的值為0任何地方使用std::nullptr_t類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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