Quel fichier d'en-tête doit être inclus pour utiliser nullptr dans g++?

j'utilise g++ 4.4.1 et je veux utiliser nullptr , mais je ne suis pas capable de trouver quel fichier d'en-tête doit être inclus. Il ne semble pas être mot-clé non plus, parce que ma tentative de l'utiliser est rejetée comme

error: 'nullptr' was not declared in this scope
21
demandé sur Arun 2010-09-21 04:15:31

4 réponses

GCC 4.4.1 ne supporte pas nullptr .

Support pour nullptr a été ajouté dans GCC 4.6.0: http://gcc.gnu.org/gcc-4.6/changes.html

amélioration du support expérimental prochaine norme C++0x ISO c++ , y compris le support pour nullptr (merci à Magnus Fromreide), noexcept, les syndicats sans restriction, basé sur la gamme pour boucles (grâce à Rodrigo Rivas Costa), fonctions supprimées implicitement et implicite des constructeurs de déplacement.

pour les versions précédentes de GCC, si vous voulez expérimenter avec nullptr vous pouvez essayer la solution dans cette question SO:

Peut nullptr être imité dans GCC?

20
répondu ZoogieZork 2017-05-23 11:45:38

je recommande de ne pas utiliser nullptr tel que défini ci-dessus, car il peut être dangereux. Si vous voulez utiliser nullptr l'énoncé suivant doit être vrai.

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

toutefois, sizeof(nullptr) (tel que défini ci-dessus) ne sera pas conforme à cette règle. Il va effectivement évaluer à sizeof(bad nullptr) = 1 .

c'est une implémentation correcte.

#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
répondu Yaroslav 2015-02-27 10:44:04

j'utilise-std=C++0x pour activer la fonctionnalité nullptr avec gcc 4.6.3

2
répondu xsj0jsx 2014-01-30 10:47:22

si vous n'avez pas le dernier gcc qui supporte C++11 , essayez D'utiliser NULL au lieu de nullptr.

2
répondu lppier 2015-07-14 05:37:46