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