24

g++ 4.4.1 を使用していて、使用したいのですがnullptr、インクルードする必要があるヘッダー ファイルを見つけることができません。私の試みは次のように拒否されるため、キーワードでもないようです。

error: 'nullptr' was not declared in this scope
4

4 に答える 4

21

GCC 4.4.1 はサポートしていませんnullptr

のサポートnullptrが GCC 4.6.0 で追加されました: http://gcc.gnu.org/gcc-4.6/changes.html

nullptr (Magnus Fromreide に感謝)、noexcept、無制限の共用体、範囲ベースの for ループ (Rodrigo Rivas Costa に感謝)、暗黙的に削除された関数、および暗黙的な移動コンストラクターのサポートを含む、今後の C++0x ISO C++ 標準の実験的サポートが改善され ました。 .

GCC の以前のバージョンでは、実験したい場合はnullptr、この SO の質問で回避策を試すことができます。

nullptr は GCC でエミュレートできますか?

于 2010-09-21T00:18:13.250 に答える
3

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
于 2012-08-22T15:22:14.433 に答える
2

C++11 をサポートする最新の gcc がない場合は、nullptr の代わりに NULL を使用してみてください。

于 2015-07-14T05:37:46.607 に答える
2

-std=c++0x を使用して、gcc 4.6.3 で nullptr 機能を有効にします。

于 2014-01-30T10:47:22.173 に答える