Newbie Frage: Compiler will 1/2 nicht ausrechnen



  • @JPSelter: An der Uni lernst du bestimmt kein fundiertes C++! offensichtlich noch nicht mal die grundlagen. *lol*



  • Disi schrieb:

    Hi, du könntest auch folgendes machen

    int a,b;
    double d;
    
    a= 1;
    b = 2;
    
    d = (double)(a/b);
    

    Nein, das ergibt auch 0.



  • Disi schrieb:

    int a,b;
    double d;
    
    a= 1;
    b = 2;
    
    d = (double)(a/b);
    

    Wenn schon mit Cast, dann solltest du folgendes probieren

    d = double(a) / b;
    


  • Dieser Thread wurde von Moderator/in Unix-Tom aus dem Forum MFC mit dem Visual C++ in das Forum C++ verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • groovemaster schrieb:

    Disi schrieb:

    int a,b;
    double d;
    
    a= 1;
    b = 2;
    
    d = (double)(a/b);
    

    Wenn schon mit Cast, dann solltest du folgendes probieren

    d = double(a) / b;
    

    Wenn schon mit Cast dann bitte so

    d = static_cast<double>(a) / b;
    

    :p 😃 😉



  • Wenn schon mit Cast dann bitte so

    d = static_cast<double>(a) / b;
    

    :p 😃 😉

    Wo ist eigentlich der Unterschied zwischen
    I (type) variable;
    II type(variable);
    III static_cast<type>(variable);

    Die I u. II sind 'oldschool' und soll man nicht mehr verwenden.
    Aber warum?
    Was ist an static_cast besser?



  • static_cast<> ist besser weil:

    - es leichter zu identifizieren ist durch die Schreibweise als die alten Casts
    - weil es zusammen mit den anderen C++ Casts flexibler ist und man sofort sieht wie gecastet wird (dynamic_cast usw)



  • anonymous24 schrieb:

    Wo ist eigentlich der Unterschied zwischen
    I (type) variable;
    II type(variable);
    III static_cast<type>(variable);

    II und III sind in diesem Fall allerdings äquivalent.



  • groovemaster schrieb:

    Disi schrieb:

    int a,b;
    double d;
    
    a= 1;
    b = 2;
    
    d = (double)(a/b);
    

    Wenn schon mit Cast, dann solltest du folgendes probieren

    d = double(a) / b;
    

    Huhu, sorry da hatte ich mal wieder schneller getippt als gedacht 🙄
    Natürlich meinte ich diese Lösung

    Zur Erläuterunt evtl. nochmal

    (double) (a/b) = (double) (1/2) = (double) 0

    während

    double(a) / b = double (1) / 2 = double 0.5

    ist

    Mfg

    Disi



  • anonymous24 schrieb:

    Die I u. II sind 'oldschool' und soll man nicht mehr verwenden.

    AFAIK ist lediglich I 'oldschool'. Das sind sogenannte C-Casts und die sollte man in C++ wirklich vermeiden, da Typsicherheit damit praktisch vollkommen verloren geht. Ansonsten sollte man ..._cast verwenden. Der functional cast (II) ist dann sinnvoll, wenn man temporäre Objekte erstellt. Die Verwendung ist insofern identisch zu einem expliziten ctor Aufruf.
    Aber wie Hume bereits schrieb, ist folgendes äquivalent

    d = double(a) / b;
    d = static_cast<double>(a) / b;
    

    Such dir also was aus. 🙂


Anmelden zum Antworten