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
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:
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
j'utilise-std=C++0x pour activer la fonctionnalité nullptr avec gcc 4.6.3
si vous n'avez pas le dernier gcc qui supporte C++11 , essayez D'utiliser NULL au lieu de nullptr.