Какой файл заголовка должен быть включен для использования nullptr в g++?
Я использую g++ 4.4.1 и хочу использовать nullptr
, но я не могу найти, какой файл заголовка требуется включить. Это не похоже на ключевое слово, потому что моя попытка использовать его отклоняется как
error: 'nullptr' was not declared in this scope
4 ответов
GCC 4.4.1 не поддерживает nullptr
.
поддержка nullptr
был добавлен в GCC 4.6.0:
http://gcc.gnu.org/gcc-4.6/changes.html
улучшенная экспериментальная поддержка предстоящий стандарт C++0x ISO C++ , включая поддержку nullptr (спасибо Магнусу Fromreide), как noexcept, неограниченные союзы, основанные на диапазоне для петли (спасибо Родриго Ривас Коста), неявно удаленные функции и неявный ход проектировщики.
для более ранних версий GCC, если вы хотите поэкспериментировать с nullptr
вы можете попробовать обходной путь в этом вопросе SO:
Я бы рекомендовал не использовать nullptr
Как определено выше, потому что это может быть опасно. Если вы хотите использовать nullptr
следующее утверждение должно быть верным.
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
Если у вас нет последнего gcc , который поддерживает C++11, попробуйте использовать NULL вместо nullptr.