Какой заголовочный файл нужно включить для использования nullptr в g ++? - PullRequest
21 голосов
/ 21 сентября 2010

Я использую g ++ 4.4.1 и хочу использовать nullptr, но не могу найти, какой заголовочный файл требуется включить. Похоже, это также не ключевое слово, потому что моя попытка использовать его отклоняется как

error: 'nullptr' was not declared in this scope

Ответы [ 4 ]

20 голосов
/ 21 сентября 2010

GCC 4.4.1 не поддерживает nullptr.

Добавлена ​​поддержка nullptr в GCC 4.6.0: http://gcc.gnu.org/gcc-4.6/changes.html

Улучшена экспериментальная поддержка грядущий стандарт C ++ 0x ISO C ++, включая поддержку nullptr (спасибо Магнусу Фромрайду), кроме неограниченные союзы, основанные на диапазоне для петли (благодаря Родриго Ривас Коста), неявно удаленные функции и неявные конструкторы перемещения.

Для более ранних версий GCC, если вы хотите поэкспериментировать с nullptr, вы можете попробовать обойти этот вопрос SO:

Можно ли эмулировать nullptr в GCC?

3 голосов
/ 22 августа 2012

Я бы рекомендовал не использовать 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
2 голосов
/ 14 июля 2015

Если у вас нет последней версии gcc, которая поддерживает C ++ 11, попробуйте использовать NULL вместо nullptr.

2 голосов
/ 30 января 2014

Я использую -std = c ++ 0x, чтобы включить функцию nullptr с gcc 4.6.3

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...