在g ++中使用nullptr需要包含哪个头文件?

时间:2010-09-21 00:15:31

标签: g++ nullptr

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

error: 'nullptr' was not declared in this scope

4 个答案:

答案 0 :(得分:20)

GCC 4.4.1不支持nullptr

GCC 4.6.0中添加了对nullptr的支持: http://gcc.gnu.org/gcc-4.6/changes.html

  

改进了对实验的支持   即将推出的C ++ 0x ISO C ++标准,   包括对nullptr的支持(谢谢   到Magnus Fromreide),noexcept,   不受限制的工会,以范围为基础   循环(感谢Rodrigo Rivas Costa),   隐式删除的功能和   隐式移动构造函数。

对于早期版本的GCC,如果您想体验nullptr,可以尝试使用此SO问题中的解决方法:

Can nullptr be emulated in GCC?

答案 1 :(得分:3)

我建议不要使用上面定义的nullptr,因为它可能很危险。如果您想使用nullptr,则以下陈述应为真。

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

答案 2 :(得分:2)

我使用-std = c ++ 0x来启用带gcc 4.6.3的nullptr功能

答案 3 :(得分:2)

如果您没有支持C ++ 11的最新gcc,请尝试使用NULL而不是nullptr。