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

时间:2016-07-16 10:15:05

标签: c++ cout nullptr

根据这个问题Unable to print the value of nullptr on screen

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

但是,如果你看一下:

int* f()
{
    return nullptr;
}

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

输出结果为:

  

00000000

在这个问题Why does std::cout output disappear completely after NULL is sent to it中,他们讨论了一个不同的问题。

我只是想了解为什么 std :: cout无法打印nullptr,但实际上当nullptr由函数返回返回时。

2 个答案:

答案 0 :(得分:3)

原因是nullptr 可转换到任何指针类型(“可打印”),但它本身不是指针。

查看What exactly is nullptr?

答案 1 :(得分:2)

以下是来自CPP标准[4.10]

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

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

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

int* abc = nullptr;

意愿。