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

发布于 2024-09-19 23:48:03 字数 162 浏览 9 评论 0原文

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

error: 'nullptr' was not declared in this scope

I am using g++ 4.4.1 and want to use nullptr, but I am not being able to find which header file is required to be included. It does not seem to be keyword either, because my attempt to use it is rejected as

error: 'nullptr' was not declared in this scope

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

硪扪都還晓 2024-09-26 23:48:03

GCC 4.4.1 不支持 nullptr

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

改进了对以下内容的实验支持
即将推出的 C++0x ISO C++ 标准,
包括对 nullptr 的支持(感谢
致马格努斯·弗罗莱德),没有例外,
无限制联合,基于范围
循环(感谢 Rodrigo Rivas Costa),
隐式删除的函数和
隐式移动构造函数。

对于早期版本的 GCC,如果您想尝试 nullptr,您可以尝试以下问题中的解决方法:

可以在 GCC 中模拟 nullptr 吗?

GCC 4.4.1 does not support nullptr.

Support for nullptr was added in GCC 4.6.0:
http://gcc.gnu.org/gcc-4.6/changes.html

Improved experimental support for the
upcoming C++0x ISO C++ standard,
including support for nullptr (thanks
to Magnus Fromreide), noexcept,
unrestricted unions, range-based for
loops (thanks to Rodrigo Rivas Costa),
implicitly deleted functions and
implicit move constructors.

For earlier versions of GCC, if you want to experiment with nullptr you can try the workaround in this SO question:

Can nullptr be emulated in GCC?

筱果果 2024-09-26 23:48:03

我建议不要使用上面定义的 nullptr,因为它可能很危险。如果您想使用 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

I would recommend not using nullptr as defined above, because it can be dangerous. If you want to use nullptr the following statement should be true.

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

However, sizeof(nullptr) (as defined above) will not comply to this rule. It will actually evaluate to sizeof(bad nullptr) = 1.

This is a correct implementation.

#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
夏花。依旧 2024-09-26 23:48:03

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

I use -std=c++0x to enable the nullptr feature with gcc 4.6.3

遗弃M 2024-09-26 23:48:03

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

If you don't have the latest gcc which supports C++11 , try using NULL instead of nullptr.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文