nullptr



  • Der kommende C++-Standard C++09 soll die typsichere Konstante "nullptr" enthalten, die die leidige Problematik mit NULL beheben soll.

    Siehe im Artikel C++09 (Teil 1) - Ein Überblick: Sprachfeatures (ganz unten), das dort verlinkte Proposal oder eine von vielen Diskussionen "NULL oder 0".

    Das Problem in Kürze:

    void foo( int some_value );
    void foo( int* some_pointer );
    
    foo( 0 );       // ruft foo(int) auf
    foo( NULL );    // ruft leider auch foo(int) auf
    
    // Wir brauchen sowas:
    foo( nullptr ); // ruft foo(int*) auf
    

    Der im Proposal vorgestellte, typsichere Null-Zeiger für den derzeitigen Stand sieht so aus:

    const    // this is a const object...
    class {
    public:
        template<class T>    // convertible to any type
        operator T*() const    // of null non-member
        { return 0; }    // pointer...
    
        template<class C, class T>  // or any type of null
        operator T C::*() const    // member pointer...
        { return 0; }
    
    private:
        void operator&() const;    // whose address can't be taken
    } nullptr = {};    // and whose name is nullptr
    

    oder auch, um Zeilen und Zeichen zu sparen:

    const class {
    public:
        template<class T> operator T*() const  {return 0;}
        template<class C, class T> operator T C::*() const  {return 0;}
    private:
        void operator&() const;
    } nullptr = {};
    

Anmelden zum Antworten