J'utilise g ++ 4.4.1 et je veux utiliser nullptr
, mais je ne suis pas en mesure de trouver quel fichier d'en-tête doit être inclus. Il ne semble pas être mot clé non plus, car ma tentative d'utilisation est rejetée comme
error: 'nullptr' was not declared in this scope
GCC 4.4.1 ne prend pas en charge nullptr
.
Prise en charge de nullptr
a été ajouté dans GCC 4.6.0: http://gcc.gnu.org/gcc-4.6/changes.html
Prise en charge expérimentale améliorée pour le prochain standard C++ 0x ISO C++, , y compris la prise en charge de NullPTR (grâce à Magnus Fromreide), noExcept, des syndicats sans restriction, Basé pour les boucles (grâce à Rodrigo Rivas Costa), des fonctions implicitement supprimées et des constructeurs de déplacement implicites.
Pour les versions antérieures de GCC, si vous souhaitez expérimenter avec nullptr
, vous pouvez essayer la solution de contournement dans ce SO Question:
Je recommanderais pas d'utiliser nullptr
tel que défini ci-dessus, car cela peut être dangereux. Si vous souhaitez utiliser nullptr
, la déclaration suivante doit être vraie.
sizeof(nullptr) == sizeof(void*) == sizeof(any pointer)
Cependant, sizeof(nullptr)
(tel que défini ci-dessus) ne se conformera pas à cette règle. Il évaluera réellement à sizeof(bad nullptr) = 1
.
Ceci est une mise en œuvre 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
Si vous n'avez pas le dernier GCC qui prend en charge C++ 11, essayez d'utiliser NULL au lieu de NullPtr.
J'utilise -std = C++ 0x pour activer la fonctionnalité NullPtr avec GCC 4.6.3