richtig oder falsch?



  • Ich schrieb:

    Mit einem C-Cast kann ich ja z.B. einen int in einen int-Pointer casten. Das kann ich mit der functional notation aber nicht.

    Daniel E. schrieb:

    Doch, es macht nur niemand:

    Oha. Trotz der unzähligen Bücher und Artikel die ich zum Thema C++ gelesen habe, habe ich immer noch keine Ahnung von solchen einfachen Basissachen 😞

    Naja, auf jeden Fall danke für den Hinweis 🙂



  • C Newbie schrieb:

    die beiden sind gleich.

    😮 😕
    Hab gar nicht gewust das ich das geschrieben habe.
    Ich habe ungefähr zu der Zeit zwar etwas geschrieben, aber das war doch schon
    etwas anders.
    Wie kann das sein ?



  • volkard schrieb:

    float y = (float)x;
    und
    float y = float(x);
    sind gleich.

    steht explizit so im standard. woher das gerücht kommt, an das ich auch bis vor kurzem gleibte, die zweite version sei sicherer, weiß ich nicht. es gehen gerüchte um, das habe im struppi gestanden.

    Also ich wurde so vor ca. 8-9 Monaten hier tierisch zur Sau gemacht weil ich die erste Variante benutzt habe um ein int in eine Fließkommazahl zu casten und auf _alle_ erdenklichen Schwachstellen hingewiesen und jetzt sollen sie doch gleich sein? 😕



  • ich glaub da ging es um C-style cast vs. static_cast



  • da ging es aber um c-cast vs. reinterpret/static/dynamic/const_cast



  • Der "Struppi" sagt dazu auf Seite 140 (4. Auflage):

    C++ hat von C die Schreibweise (T)a geerbt, die jede Konvertierung ausführt, die als Kombination von static_cast, reinterpret_cast und const_cast ausgeführt werden kann, um einen Wert des Typs T aus dem Audruck a zu erzeugen (§B.2.3). Dieser C-Cast ist sehr viel gefährlicher als die bekannten Konvertierungsoperatoren, da die Schreibweise viel unauffälliger ist und die vom Programmierer beabsichtigte Konvertierung nicht explizit ausgeschrieben ist. Das heißt, (T)a könnte eine portable Konvertierung zwischen verwandten Typen sein, eine nicht portable Konvertierung zwischen nicht verwandten Typen oder das Entfernen von const von einem Zeigertyp. Ohne die genauen Typen von T und a zu kennen, kann man dies nicht entscheiden.



  • und? da kommt ja nur (T)a vor, hier geht es um unterschiede.
    vielleicht sind die nur fuer eingebaute typen gleich? fuer klassen ist ja T(a) ein ctor aufruf, wird (T)a automatisch in einen solchen umgemodelt? oder werden vielleicht nur die bits reinterpretet?



  • und? da kommt ja nur (T)a vor, hier geht es um unterschiede.

    Wenn du mal 5 Posts zurück blätterst dann wirst du sehen, dass es darum geht, dass float(integer) und (float)integer gleichbedeutend sind und zweiteres keineswegs unsicher ist. Volkard meinte das Gerücht mit der Unsicherheit kam aus dem Stroustrup und ich habe eine Stelle abgetippt um zu zeigen, dass dem nicht so ist. Im Stroustrup steht, dass der C-Cast als eine mögliche Kombination von static_cast, reinterpret_cast und const_cast interpretiert wird. In Problemfällen castet dieser also fleißig um alle Ecken rum und ist _nur_ deshalb so gefährlich. Bei dem Cast (float)integer wird aus dem berüchtigten C-Cast ein static_cast 😉 .



  • verstehe ich nicht. beweis durch beispiel gibt es nicht, nur beweis durch gegenbeispiel.



  • Gegenbeispiel wozu? 😕


Anmelden zum Antworten