为什么 std::cout 只有在函数返回时才可以打印 nullptr 的值
Why can std::cout print the value of nullptr only if returned by a function?
根据此问题 无法在屏幕上打印 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;
将。
相关文章:
- 数组索引的值没有增加
- 如何取消对nullptr的屏蔽,返回正确的对象
- 'short int'持有的值溢出,但"自动"不会溢出?
- C++ - "!pointer"和"pointer == nullptr"的区别?
- 是默认情况下分配给char数组常量的值
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 为什么我无法更改"set<set>"循环中的值<int>
- 有效地使用std::unordered_map来插入或增加键的值
- <streamsize>C++ 中 numeric_limits::max() 的值
- 为什么不能修改对象中的值?另外,我如何改进此链表?
- 无法获取webot::PositionSensor对象中位置传感器的值
- 正在将无序映射设置为无序映射的值
- 着色器纹理值与创建纹理时写入的值不同
- 无法按cpp中的值返回矢量
- 指针没有更新它在void函数内部指向的值
- 不能将 "void *" 类型的值分配给类型 "TCHAR" 的实体
- RapidXML 节点在 try catch 块中具有正确的值,但它在块外为 nullptr
- 无法在屏幕上打印 nullptr 的值
- 是指针定义行为映射中 nullptr 的默认值
- 为什么 std::cout 只有在函数返回时才可以打印 nullptr 的值