Unterscheidung bei int zwischen 0 und null



  • @hustbaer: Welchen genauen Fehler erkennt man den damit? Die unabsichtliche Initialisierung eines Integers mit 0 anstatt mit 0?

    MfG SideWinder



  • vista schrieb:

    TactX schrieb:

    vista schrieb:

    SideWinder schrieb:

    Er hat ja schon ein Stichwort geliefert, schlag das doch nach!

    geht es um ausnahmen (falls negative zahlen nicht als 2er-komplement gespeichert werden)?
    oder wie soll ich das verstehen?

    Ja, das meinte ich.

    aber es gibt doch wohl keine CPU mehr, die das so macht.
    wer braucht schon eine negative 0?
    😉

    Würde mich nicht wundern, wenn es den ein oder anderen DSP gäbe der so arbeitet. Hat ja nicht nur Nachteile.



  • Zum Thema nullptr:

    Die Overload Resolution wird dadurch verbessert!

    Wie kann der Compiler denn unterscheiden, ob er die Überladung mit int oder mit int* nehmen soll, wenn man einfach nur 0 übergibt?

    Beispiel:

    void testklasse::test1(int a)
    {
         m_Test = a;
    }
    
    void testklasse::test1(int* pA)
    {
         *pA = m_Test;
    }
    
    ...
    
    testklasse t;
    t.test1(0);       // Will ich jetzt das Attribut m_Test 0 setzen?
    t.test1(NULL);    // wie eine Zeile höher, der Compiler kann nicht zwischen int und int* unterscheiden und wird die int Variante nehmen
    t.test1(nullptr); // Hier ist klar, dass ich die "Get" Methode (mit Pointer) aufrufen möchte.
    

    Das Beispiel ist vieleicht nicht ganz optimal, aber es ist auf jeden Fall sinnvoll eine Unterscheidung zwischen "normalen" und "pointer" Argumenten zu machen. Ich habe es mir in dem Beispiel erspart die int's auch noch anzulegen.

    Gruß Paddy



  • @Paddy82:
    Für die overload resolution kann man im Moment auch static_cast verwenden.



  • @hustbaer

    Wusste ich noch nicht...

    Ist aber trozdem nicht so "schön" wie wenn man das keyword hat, finde ich.



  • Paddy82 schrieb:

    Zum Thema nullptr:

    Die Overload Resolution wird dadurch verbessert!...

    Was ich gut finde ... aber vermutlich wird das "im echten Leben" zu einigem Ärger führen, weil es vielleicht Programme gibt, die das falsch gemacht haben aber das "richtige Verhalten" damit verbinden....("Leichen im Keller").

    Na, mal abwarten - zur Not gibt's einen Compilerschalter, mit dem man das auf das alte Verhalten umschalten kann.

    Gruß,

    Simon2.



  • Das von euch aber auch keiner auf die Idee gekommen ist mal in der <windef.h> nachzugucken was NULL ist:

    #ifndef NULL
    #ifdef __cplusplus
    const unsigned long NULL = 0;
    #else
    #define NULL ((void*)0)
    #endif
    


  • Wie die Konstante NULL definiert ist, ist compilerspezifisch.
    Beim MinGW steht z.B.

    #ifndef NULL
        #ifdef __cplusplus
            #define NULL 0
        #else
            #define NULL ((void*)0)
        #endif
    #endif
    

    Und da es sich hier ja um c++ handelt gilt #define NULL 0, was bereits mehrfach erwähnt wurde...



  • midon schrieb:

    Das von euch aber auch keiner auf die Idee gekommen ist mal in der <windef.h> nachzugucken was NULL ist...

    Wo finde ich die denn unter Linux ? 😉

    Gruß,

    Simon2.



  • Simon2 schrieb:

    midon schrieb:

    Das von euch aber auch keiner auf die Idee gekommen ist mal in der <windef.h> nachzugucken was NULL ist...

    Wo finde ich die denn unter Linux ? 😉

    Gruß,

    Simon2.

    ach du mit deinem exotensystem da! Kauf dir mal ein gescheites das richtig auf Laptops läuft.



  • liunx-hasser schrieb:

    Simon2 schrieb:

    midon schrieb:

    Das von euch aber auch keiner auf die Idee gekommen ist mal in der <windef.h> nachzugucken was NULL ist...

    Wo finde ich die denn unter Linux ? 😉

    Gruß,

    Simon2.

    ach du mit deinem exotensystem da! Kauf dir mal ein gescheites das richtig auf Laptops läuft.

    Laptops ? Ach Du meinst MacOS ?

    Aber was mach' ich, wenn ich richtig Power brauche und nicht nur so Spielanwendungen ?
    BTW: Isch 'abe garrr kein Linux !

    Gruß,

    Simon2.



  • Simon2 schrieb:

    BTW: Isch 'abe garrr kein Linux !

    Ja also, was laberst Du dann hier über dieses Exoten-OS? Wolltest wohl flamen ne?



  • Nein, er wollte dich nur darauf hinweisen, daß es noch andere Systeme gibt als die von Microschrott. Hier sehe ich nur einen User "flamen" - und der nennt sich 'linux-hasser'.

    PS: Ich arbeite selber unter Windoof - aber ich bin tolerant genug, um auch andere Systeme anzuerkennen (und Linux ist kein Exot). Und im C++ Board solltest du schon mit systemunabhängigen Ansätzen kommen, soweit das möglich ist.



  • linux-hasser schrieb:

    Simon2 schrieb:

    BTW: Isch 'abe garrr kein Linux !

    Ja also, was laberst Du dann hier über dieses Exoten-OS? Wolltest wohl flamen ne?

    CStoll schrieb:

    Nein, er wollte dich nur darauf hinweisen, daß es noch andere Systeme gibt als die von Microschrott....

    [panzer]Rrrrrrischtisch ![/panzer]

    Oder um genau zu sein: Ich wollte eine Antwort darauf geben:

    midon schrieb:

    Das von euch aber auch keiner auf die Idee gekommen ist mal in der <windef.h> nachzugucken was NULL ist:...

    @linux-hasser: Nachdem nun wohl geklärt ist, was ich zu diesem Thema beitragen wollte: Was ist denn Dein Anliegen in diesem Thread ?

    Gruß,

    Simon2.


Anmelden zum Antworten