`cout<<nullptr` 给出错误,尽管 `nullptr` 的类型来自 C++17 的 `nullptr_t`

`cout<<nullptr` giving error though `nullptr` has type `nullptr_t` from C++17

代码-1

#include <iostream>

int main()
{
    std::cout << nullptr;
    return 0;
}

输出

Error: Use of overloaded operator '<<' is ambiguous (with operand types 'std::ostream' (aka 'basic_ostream<char>') and 'nullptr_t')

即使 nullptr 也有特定类型显示错误的原因。 但是

Code-2

#include <iostream>

int main()
{
    std::cout << (void*)nullptr;
    return 0;
}

输出

0

工作正常。为什么它与 void* 一起工作,即使它不是一个类型?

std::cout << nullptr; 适用于 C++17。如果它对你不起作用,那么要么你没有使用 C++17,要么你的语言实现对 C++17 的支持不完整。

在 C++17 之前,std::cout << nullptr; 不起作用,因为重载 std::ostream::operator<<(std::nullptr_t) 不存在并且没有明确的最佳重载 nullptr 可以隐式转换到.

Why it work with void* even it is not a type ?

void* 是一种类型,它可以工作,因为重载 std::ostream::operator<<(const void*); 存在。