gpt4 book ai didi

c++ - NULL 宏实际上可以是一个 nullptr 吗?

转载 作者:IT老高 更新时间:2023-10-28 14:01:58 27 4
gpt4 key购买 nike

根据标准草案N4713(7.11/1):

A null pointer constant is an integer literal (5.13.2) with value zero or a prvalue of type std::nullptr_t.

和 21.2.3/2:

The macro NULL is an implementation-defined null pointer constant.

遵循 NULL 可以定义为 nullptrcppreference 上也提到了相同的内容:

#define NULL 0
//since C++11
#define NULL nullptr

同时“加法运算符”子句说 (8.5.6/7):

If the value 0 is added to or subtracted from a null pointer value, the result is a null pointer value. If two null pointer values are subtracted, the result compares equal to the value 0 converted to the type std::ptrdiff_t.

因此下面的代码应该是有效的:

0 + nullptr; 
nullptr - nullptr;

但由于 std::nullptr_t 缺少 +/- 运算符,code is invalid .

是否有什么我没有考虑到或 NULL 宏实际上不能定义为 nullptr

最佳答案

虽然nullptr 是一个空指针constant,但它不是一个空指针value。后者是某种指针类型的值,而 std::nullptr_t 不是。

引用:

A null pointer constant is an integer literal (5.13.2) with value zero or a prvalue of type std::nullptr_t. A null pointer constant can be converted to a pointer type; the result is the null pointer value of that type and is distinguishable from every other value of object pointer or function pointer type. Such a conversion is called a null pointer conversion. [...]

N4659 中的 7.11/1,强调我的

所以 NULL 确实可以是 nullptr 而无需提供算术运算符。

关于c++ - NULL 宏实际上可以是一个 nullptr 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48904015/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com