为什么 std::cout 只有在函数返回时才可以打印 nullptr 的值

Why can std::cout print the value of nullptr only if returned by a function?

本文关键字:nullptr 的值 打印 函数 cout std 为什么 返回      更新时间:2023-10-16

根据此问题 无法在屏幕上打印 nullptr 的值

我无法打印 nullptr 的值,因为它的类型是 nullptr_t,而 std::cout 没有这样的重载。

但是,如果你看看这个:

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

输出为:

00000000

在这个问题中,为什么 std::cout 输出在发送到 NULL 后完全消失,他们谈论了一个不同的问题。

我只是想了解为什么 std::cout 不能打印 nullptr,但当函数返回 nullptr 时,它实际上可以。

这样做

的原因是nullptr可以转换为任何指针类型(这是"可打印的"),但它本身不是指针。

看看 nullptr 到底是什么?

以下是 CPP 标准 [4.10] 中 nullptr 的含义

  • 空指针常量是整数类型的整数类型的整数常量表达式 (5.19) prvalue,其计算结果为零或 std::nullptr_t 类型的 prvalue。空指针常量可以转换为指针类型;结果是该类型的 null 指针值,并且可以与对象指针或函数指针类型的所有其他值区分开来。此类转换称为空指针转换。

CPP 标准指定的是,它不是 std::nullptr_t 值,它的计算结果为零或 std::nullptr_t 类型的 prvalue

在您的情况下,它在某种程度上几乎是一个(TYPE)指针,因此当您尝试粘贴它时,它会粘贴出其类型的值(它指向的位置,但本身不会)。你的函数返回一个 int*,你给它一个 nullptr。所以你基本上要做的是给一个int*一个值。nullptr 本身不会有值,但

int* abc = nullptr;

将。