0

我有以下内容:

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)with p==nullptr 不调用 func(nullptr),而是调用 func(const char*) 呢?

[编辑]
根据回复,我的结论是 func(...) 是根据参数的类型调用的,并且p是 type char*,将 p 的值设置为 nullptr 不会更改类型,也不会更改 func(char* ) 被称为 - 正如接受的答案也解释的那样。

4

1 回答 1

3

现在,您问题的确切内容实际上深陷混乱,因为您看到“未调用”的原因是您的原始代码试图流式传输一个空字符指针,这会在流上设置一个错误标志,并且防止它再次工作,直到它被纠正。无论如何,这是答案的要点:


您不能分配nullptr给 achar*并期望它char*神奇地转换为 a std::nullptr_t。您的指针仍然是 a char*,并且它具有 nullptr

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

于 2014-06-09T18:58:55.820 回答