`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*);
存在。
代码-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*);
存在。