我有以下内容:
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)
进行评论,则不会调用它们。为什么不?为什么func(p)
与p == nullptr不调用func(nullptr),而是调用func(const char *)?
[编辑]
根据回答我的结论是func(...)是根据参数的类型调用的,而p
的类型是char*
,将p&#39的值设置为nullptr不会改变类型并且不会改变func(char *)被调用 - 因为接受的答案也解释了。
答案 0 :(得分:3)
你的问题的确切内容实际上已经陷入困惑,现在,因为你看到事情的原因&#34;没有被称为&#34;是你的原始代码试图流式传输一个空字符指针,它在流上设置一个错误标志,并防止它再次工作,直到它被纠正。无论如何,这里是答案的要点:
您无法将nullptr
分配给char*
,并希望char*
能够神奇地转换为std::nullptr_t
。您的指针仍然是char*
,并且值 nullptr
。
std::nullptr_t
的好处是,在空指针文字中,它自己的不同类型不会转换为整数类型;这并不意味着您可以在指针具有值std::nullptr_t
的任何地方使用类型0
。