没有调用nullptr的重载函数

时间:2014-06-09 18:17:31

标签: c++ nullptr

我有以下内容:

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 *)被调用 - 因为接受的答案也解释了。

1 个答案:

答案 0 :(得分:3)

你的问题的确切内容实际上已经陷入困惑,现在,因为你看到事情的原因&#34;没有被称为&#34;是你的原始代码试图流式传输一个空字符指针,它在流上设置一个错误标志,并防止它再次工作,直到它被纠正。无论如何,这里是答案的要点:


您无法将nullptr分配给char*,并希望char*能够神奇地转换为std::nullptr_t。您的指针仍然是char*,并且 nullptr

std::nullptr_t的好处是,在空指针文字中,它自己的不同类型不会转换为整数类型;这并不意味着您可以在指针具有值std::nullptr_t的任何地方使用类型0