代码-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*一起工作,即使它不是一种类型?
发布于 2021-08-27 11:29:30
std::cout << nullptr;适用于C++17,如果它不适用于您,那么要么您没有使用C++17,要么您的语言实现对C++17的支持是不完整的。
在C++17之前,std::cout << nullptr;没有工作,因为重载std::ostream::operator<<(std::nullptr_t)不存在,并且没有明确的最佳重载可以隐式转换为nullptr。
为什么它与void一起工作*即使它不是一种类型?
void*是一种类型,它的工作是因为重载std::ostream::operator<<(const void*);的存在。
https://stackoverflow.com/questions/68952355
复制相似问题