Quali bisogni file di intestazione da includere per l'utilizzo di nullptr in g ++?

StackOverflow https://stackoverflow.com/questions/3756473

  •  04-10-2019
  •  | 
  •  

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
È stato utile?

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:

Può nullptr essere emulato in GCC?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top