小编Ful*_*ngo的帖子

c++ nullptr 实现是如何工作的?

我很想知道它是如何nullptr工作的。标准 N4659 和 N4849 说:

  1. 它必须有类型std::nullptr_t
  2. 你不能拿它的地址;
  3. 可以直接转换为指针和成员指针;
  4. sizeof(std::nullptr_t) == sizeof(void*);
  5. 其转换boolfalse;
  6. 它的值可以转换为与 相同的整数类型(void*)0,但不能向后转换;

所以它基本上是一个与 具有相同含义的常量(void*)0,但它具有不同的类型。我std::nullptr_t在我的设备上找到了实现,如下所示。

#ifdef _LIBCPP_HAS_NO_NULLPTR

_LIBCPP_BEGIN_NAMESPACE_STD

struct _LIBCPP_TEMPLATE_VIS nullptr_t
{
    void* __lx;

    struct __nat {int __for_bool_;};

    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR nullptr_t() : __lx(0) {}
    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR nullptr_t(int __nat::*) : __lx(0) {}

    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR operator int __nat::*() const {return 0;}

    template <class _Tp>
        _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR
        operator _Tp* () const {return 0;}

    template <class _Tp, class …
Run Code Online (Sandbox Code Playgroud)

c++ null-pointer nullptr c++17

19
推荐指数
1
解决办法
954
查看次数

标签 统计

c++ ×1

c++17 ×1

null-pointer ×1

nullptr ×1