Pointer und Funktionen



  • ...



  • Swordfish schrieb:

    reinterpret_cast<>() , was einem C-Style-Cast gleichkommt.

    Hinter einem C-Cast kann wirklich alles stecken, nicht nur ein reinterpret_cast .



  • out schrieb:

    Swordfish schrieb:

    reinterpret_cast<>() , was einem C-Style-Cast gleichkommt.

    Hinter einem C-Cast kann wirklich alles stecken, nicht nur ein reinterpret_cast .

    Ne, hinter einem C-Cast kann wirklich alles stecken (double*)(int*)0 ist nur mit reinterpret_cast<> abbildbar (oder 2 static_casts<>).

    Aber reinterpret_cast<> mit C-Style-Cast gleichsetzen ist mehr als nur irreführend.



  • ...



  • Swordfish schrieb:

    Es ist ein sehr, sehr ähnlicher Holzhammer ...

    Nein, hinter einem reinterpret_cast<> verbirgt sich NIE ein Funktionsaufruf.
    Hinter einem C-Style-Cast sehr wohl.



  • ...



  • #include <string>
    
    int main() {
      std::string s;
    
      (std::string) s;                  // OK
      static_cast<std::string>(s);      // OK
      reinterpret_cast<std::string>(s); // Compilerfehler.
    }
    

    reinterpret_cast ist ziemlich beschränkt und kommt insofern einem C-Style-Cast beim besten Willen nicht gleich. Es ist allerdings richtig, dass die Funktionalität, die reinterpret_cast abdeckt, leicht versehentlich zu missbrauchen ist -- Casts zwischen unverwandten Typen werden möglich, Casts zwischen verwandten Typen müssen nicht immer gültige Ergebnisse liefern, und der Compiler muss es anstandslos schlucken, weil du ihm gerade mit der Cast-Keule auf den Kopf geschlagen und ihn angeschrien hast, dass du schon wüsstest, was du tust. Insofern ist eine gewisse Ähnlichkeit zu C-Casts vorhanden, auch wenn C- und Reinterpret-Casts mitunter unterschiedliche Ergebnisse liefern können, wenn beide im selben Kontext kompilierbar sind. (Ich denke da an Mehrfachvererbung.)

    Übrigens kann ein reinterpret_cast durchaus Berechnungen auf dem Eingabewert veranlassen (das behält der Standard sich in 5.2.10 (3) ausdrücklich vor):

    ISO/IEC 14882:2011 5.2.10 (3) schrieb:

    3 [ Note: The mapping performed by reinterpret_cast might, or might not, produce a representation different from the original value. — end note ]

    Ihr habt also beide Unrecht. :p



  • seldon schrieb:

    [...] der Compiler muss es anstandslos schlucken, weil du ihm gerade mit der Cast-Keule auf den Kopf geschlagen und ihn angeschrien hast, dass du schon wüsstest, was du tust. [...]

    Swordfish schrieb:

    [...] Es ist ein sehr, sehr ähnlicher Holzhammer ...

    👍 🤡



  • morlix schrieb:

    Ich wollte nicht die String Klasse verwenden, da ich später auch gerne bei anderen Projekten mitarbeiten würde und da werde ich eher C als C++ brauchen.

    Dann solltest du lieber gleich C lernen. "Vernünftiges" C++ hat mit C nur noch sehr wenig zu tun.



  • morlix schrieb:

    ich versuche gerade in meiner Freizeit ein wenig C/C++ zu lernen

    Sowas gibt es nicht. Außer als Spottausdruck für das, was ein gewisser Autor verbricht.

    morlix schrieb:

    Zum lernen nutze ich "C++ von A bis Z von Jürgen Wolf" und das web.

    Ebendieser. Du wurdest gewolft. Leider Pech gehabt. Das wieder loszuwerden, wird viel länger dauern, als es zu lernen.



  • Habe gerade C++ Der Programmierer und C++ Primer bestellt und werde versuchen alles von JW zu vergessen.

    Was meinst du mit so etwas wie C/C++ in seiner Freizeit zu lernen gibt es nicht?



  • ...



  • morlix schrieb:

    Habe gerade C++ Der Programmierer und C++ Primer bestellt und werde versuchen alles von JW zu vergessen.

    Was meinst du mit so etwas wie C/C++ in seiner Freizeit zu lernen gibt es nicht?

    Es gibt keine Sprache namens C/C++. Sie haben sich inzwischen unglaublich weit entfernt. Dein C/C++-Code macht einem sofort Bauchweh und Kopfweh und dann, wenn man in der main() ist und alles überstanden zu haben meint, und das exit() sieht, da möchte man sterben.


Anmelden zum Antworten