`cout<<nullptr` 给出错误,尽管 `nullptr` 的类型来自 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显示错误的原因。但
代码 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可以隐式转换为的明确的最佳重载。
void*是一种类型,它在std::ostream::operator<<(const void*);存在重载的情况下起作用。
THE END
二维码