我有以下内容:
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* ) 被称为 - 正如接受的答案也解释的那样。