【问题标题】:Why does the comparison with integer works for nullptr?为什么与整数的比较适用于 nullptr?
【发布时间】:2020-12-06 10:13:39
【问题描述】:

以下适用于 g++

assert(nullptr == 0);

我需要知道是否正在发生任何隐式类型转换。 据我所知,nullptr 只能与指针进行比较,而不能与整数进行比较,而且它的类型更安全。那么为什么与整数比较有效呢?

【问题讨论】:

    标签: c++11 nullptr


    【解决方案1】:

    那为什么用整数比较有效呢?

    因为,在大多数实现中,nullptr 是 0 机器地址。换句话说,(intptr_t)nullptr 是 0。例如在 Linux/x86-64 上就是这种情况。通过检查使用g++ -S -O2 -fverbose-asm获得的生成的汇编代码来检查

    我什至相信 C++ 标准可以保证这一点(例如 n3337

    但是,如果您使用最近的 GCC 作为 gcc -Wall -Wextra 编译代码,您可能会收到警告。

    另请阅读assert(3)。在某些情况下(使用NDEBUG),它会在编译时扩展为无操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-05
      • 2020-09-15
      • 2011-06-21
      • 2012-02-09
      • 1970-01-01
      • 1970-01-01
      • 2017-07-10
      • 2015-09-26
      相关资源
      最近更新 更多