代码之家  ›  专栏  ›  技术社区  ›  Arun

在g++中使用nullptr需要包括哪些头文件?

  •  21
  • Arun  · 技术社区  · 14 年前

    我正在使用G++4.4.1并希望使用 nullptr 但我找不到需要包含哪个头文件。它似乎也不是关键字,因为我使用它的尝试被拒绝为

    error: 'nullptr' was not declared in this scope
    
    4 回复  |  直到 9 年前
        1
  •  20
  •   Community dbr    7 年前

    一般合同条款第4.4.1款不支持 nullptr .

    支持 空指针 在GCC 4.6.0中增加: http://gcc.gnu.org/gcc-4.6/changes.html

    改进的实验支持 即将推出的C++ 0xISO C++标准, 包括对nullptr的支持 (谢谢 致马格纳斯·弗洛莱德),无例外, 不受限制的联合,基于范围 循环(感谢Rodrigo Rivas Costa) 隐式删除的函数和 隐式移动构造函数。

    对于早期版本的gcc,如果您想尝试 空指针 您可以尝试解决此问题:

    Can nullptr be emulated in GCC?

        2
  •  3
  •   jap1968    9 年前

    我建议不要用 nullptr 如上所述,因为它可能很危险。如果你想用 空指针 以下语句应为true。

    sizeof(nullptr) == sizeof(void*) == sizeof(any pointer)
    

    然而, sizeof(nullptr) (如上定义)不符合本规则。它将实际评估为 sizeof(bad nullptr) = 1 .

    这是一个正确的实现。

    #pragma once
    
    namespace std
    {
        //based on SC22/WG21/N2431 = J16/07-0301
        struct nullptr_t
        {
            template<typename any> operator any * () const
        {
            return 0;
        }
        template<class any, typename T> operator T any:: * () const
        {
            return 0;
        }
    
    #ifdef _MSC_VER
        struct pad {};
        pad __[sizeof(void*)/sizeof(pad)];
    #else
        char __[sizeof(void*)];
    #endif
    private:
        //  nullptr_t();// {}
        //  nullptr_t(const nullptr_t&);
        //  void operator = (const nullptr_t&);
        void operator &() const;
        template<typename any> void operator +(any) const
        {
            /*I Love MSVC 2005!*/
        }
        template<typename any> void operator -(any) const
        {
            /*I Love MSVC 2005!*/
        }
        };
    static const nullptr_t __nullptr = {};
    }
    
    #ifndef nullptr
    #define nullptr std::__nullptr
    #endif
    
        3
  •  2
  •   xsj0jsx    10 年前

    我使用-STD= C++0x来启用Gulc4.4.3的NulpPTR特征

        4
  •  2
  •   lppier    9 年前

    如果没有最新的支持C++ 11的GCC,尝试使用NULL而不是NulLPTR。