在c++ 11中定义为nullptr为NULL
Is NULL defined as nullptr in C++11?
c++ 11实现是否将NULL
定义为nullptr
?
新的c++标准会规定这一点吗?
来自马的嘴
C.3.2.4宏观NULL (diff.null)
1/宏NULL,在
<clocale>
、<cstddef>
、<cstdio>
、<cstdlib>
、<cstring>
、<ctime>
、<cwchar>
中定义,是本国际标准(18.2)中实现定义的c++空指针常量。
这取决于每个实现提供自己的定义,如果我没记错的话,gcc将其定义为__nullptr
,并对此进行了特殊检查(例如,验证它不在算术上下文中使用)。
所以它可以定义为nullptr
,你必须检查你的编译器/标准库文档,看看已经做了什么
不,NULL仍然和以前一样。太多人以令人惊讶的方式使用NULL宏,将其重新定义为nullptr会破坏大量代码。
详细说明:例如,人们已经使用NULL来表示多种句柄类型。如果这种类型定义背后的实际类型不是指针,那么将NULL定义为nullptr将是一个问题。此外,似乎有些人确实使用NULL来初始化数字类型。
至少这是微软在MSVC10中添加nullptr时发现的,也是为什么他们决定保持NULL的原因。其他编译器可能会选择不同的路径,但我认为它们不会。
FDIS即将发布的标准c++ 11,整型表达式仍然是空指针常数。NULL宏仍然是实现定义的,但必须为NULL指针常量。所以在实践中它意味着等于0或者可以等于0nullptr .
使用0或NULL的代码将像以前一样工作。
阅读详细信息在这里。
NULL来自C,因此它的定义必须与C和c++兼容。所以它不能是nullptr,因为那是c++关键字,而不是C,除非它在C和c++中定义不同(我们可以使用#ifdef __cplusplus来区分它们)。所以NULL通常被定义为第smth编译器特定的,像gcc中的__nullptr,或者只是((void*)0)。
- 如何在自删除后将对象设置为nullptr
- 如何取消对nullptr的屏蔽,返回正确的对象
- 元组适用于 nullptr,但不适用于 NULL
- strrchr返回nullptr而不是c 中的null
- 对 NULL、0、nullptr 的解释
- 一旦 std::weak_ptr 上的锁返回了 nullptr,它是否还会再次成为非 null
- std :: malloc在失败时返回null或nullptr吗?
- 在C 11中,Dynamic_cast返回null或std :: nullptr会发生失败
- 如何测试NULL或NULLPTR的GCROOT参考
- 对象向量中的空对象与指针向量中的NULL/nullptr
- 在移植的c头中NULL与nullptr
- 为什么函数模板不理解 NULL,但适用于 nullptr
- 将 NULL/nullptr 转换为 std::function<>& 时失败
- 当NULL不能被nullptr替换时
- Is it safe to #define NULL nullptr?
- 为什么不调用nullptr NULL呢?
- nullptr初始值和WinAPI NULL返回
- 可以安全地将预先存在的类型转换NULL的返回与较新的nullptr进行比较吗
- 在c++ 11中定义为nullptr为NULL
- "delete p; p = NULL(nullptr);"是一种反模式吗?