`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*);存在重载的情况下起作用。


以上是`cout&lt;&lt;nullptr` 给出错误,尽管 `nullptr` 的类型来自 C++17的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>