C++ 未调用null ptr的重载函数

C++ 未调用null ptr的重载函数,c++,nullptr,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; } void f

我有以下资料:

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;
}

void func(const char*p){std::cout你问题的确切内容现在实际上陷入了混乱,因为你看到事情“没有被调用”的原因您的原始代码试图流化一个空字符指针,该指针在流上设置了一个错误标志,并阻止它再次工作,直到它被更正。无论如何,下面是答案的要点:


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


std::nullptr\u t
的好处在于,赋予空指针文本它自己的独特类型,它不会转换为整数类型;这并不意味着您可以期望在指针值为
0

的任何地方使用类型
std::nullptr\u t
,您问题的确切内容实际上深陷于矛盾之中fusion,现在,因为您看到“未被调用”的原因是您的原始代码试图流化一个空字符指针,它在流上设置了一个错误标志,并阻止它再次工作,直到它被更正。无论如何,下面是答案的要点:


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


std::nullptr\u t
的好处在于,赋予空指针文本它自己的独特类型,它不会转换为整数类型;这并不意味着您可以期望在指针值为
0

的任何地方使用类型
std::nullptr\u t
,您问题的确切内容实际上深陷于矛盾之中fusion,现在,因为您看到“未被调用”的原因是您的原始代码试图流化一个空字符指针,它在流上设置了一个错误标志,并阻止它再次工作,直到它被更正。无论如何,下面是答案的要点:


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


std::nullptr\u t
的好处在于,赋予空指针文本它自己的独特类型,它不会转换为整数类型;这并不意味着您可以期望在指针值为
0

的任何地方使用类型
std::nullptr\u t
,您问题的确切内容实际上深陷于矛盾之中fusion,现在,因为您看到“未被调用”的原因是您的原始代码试图流化一个空字符指针,它在流上设置了一个错误标志,并阻止它再次工作,直到它被更正。无论如何,下面是答案的要点:


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


std::nullptr\u t
的好处在于赋予空指针文本其自身的独特类型,而该类型不会转换为整数类型;这并不意味着您可以期望在指针具有值
0

的任何位置使用类型
std::nullptr\u t
:是否可以将其修改为不尝试使用空指针
>func(p)
使用空指针,这是未定义的行为。当您进行更改时会发生什么?请参阅@DaveS:不知道我是否理解您的意思,但如果p指向有效的c字符串,则一切正常。@slashmais这是正确的。编译器必须决定在编译时调用哪个版本的
func
,因此这是不可能的s将基于参数变量的当前值--仅基于其静态类型。请更新您的问题,因为它不再是内部一致的。在所有情况下,您将从所有三个函数调用中获得输出;问题是,输出是什么。通过重新措辞和清理来更新它,而不是通过附加更多的“编辑”:没有任何标点符号或大写字母的段落。相关:您可以修改它以不尝试使用空指针
func(p)
使用空指针,这是未定义的行为。当您进行更改时会发生什么?请参阅@DaveS:不知道我是否理解您的意思,但如果p指向有效的c字符串,则一切正常。@slashmais这是正确的。编译器必须决定在编译时调用哪个版本的
func
,因此这是不可能的s将基于参数变量的当前值--仅基于其静态类型。请更新您的问题,因为它不再是内部一致的。在所有情况下,您将从所有三个函数调用中获得输出;问题是,输出是什么。通过重新措辞和清理来更新它,而不是通过附加更多的“编辑”:没有任何标点符号或大写字母的段落。相关:您可以修改它以不尝试使用空指针
func(p)
使用空指针,这是未定义的行为。当您进行更改时会发生什么?请参阅@DaveS:不知道我是否理解您的意思,但如果p指向有效的c字符串,则一切正常。@slashmais这是正确的。编译器必须决定在编译时调用哪个版本的
func
,因此这是不可能的将基于参数变量的当前值--仅其静态类型。请更新您的问题,因为它不再是内部一致的。在所有情况下,您将从所有三个函数调用中获得输出;