Quali bisogni file di intestazione da includere per l'utilizzo di nullptr in g ++?
Domanda
Sto usando g ++ 4.4.1 e voglio usare nullptr
, ma io non sono essere in grado di trovare quale file di intestazione è necessario per essere inclusi. Non sembra essere parola chiave o, perché il mio tentativo di usarlo è respinta come
error: 'nullptr' was not declared in this scope
Soluzione
GCC 4.4.1 non lo fa nullptr
supporto.
Il supporto per nullptr
è stata aggiunta nel GCC 4.6.0:
http://gcc.gnu.org/gcc-4.6/changes.html
Migliorato supporto sperimentale per la imminente C ++ 0x ISO standard C ++, il supporto anche per nullptr (grazie Magnus Fromreide), noexcept, sindacati senza restrizioni, gamma-based per loop (grazie a Rodrigo Rivas Costa), funzioni implicitamente cancellati e costruttori implicita spostare.
Per le versioni precedenti di GCC, se si vuole sperimentare con nullptr
si può provare la soluzione in questa domanda SO:
Altri suggerimenti
Raccomando di non utilizzare nullptr
come sopra definito, perché può essere pericoloso. Se si desidera utilizzare nullptr
la seguente dichiarazione deve essere vero.
sizeof(nullptr) == sizeof(void*) == sizeof(any pointer)
Tuttavia, sizeof(nullptr)
(come definito sopra) non conformi a questa regola. Esso sarà effettivamente valutare a sizeof(bad nullptr) = 1
.
Questa è una corretta attuazione.
#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
Io uso -std = C ++ 0x per abilitare la funzione nullptr con gcc 4.6.3
Se non hai l'ultima gcc che sostiene C ++ 11, provare a utilizzare NULL invece di nullptr.