Viele Fragen von einem unerfahrenem Nutzer.



  • Neue Fragen im ersten Post hinzugefügt:

    6. Was bedeutet folgende Zeile?

    (void**)Blubb
    

    7. Bezieht sich auf Frage 6.:
    Was bedeutet folgende Zeile?

    (void*)Blubb
    

    Vielen Dank für Antworten.

    Mit freundlichen Grüßen,
    Understood.


  • Mod

    Understood schrieb:

    Neue Fragen im ersten Post hinzugefügt:

    6. Was bedeutet folgende Zeile?

    (void**)Blubb
    

    7. Bezieht sich auf Frage 6.:
    Was bedeutet folgende Zeile?

    (void*)Blubb
    

    Vielen Dank für Antworten.

    Mit freundlichen Grüßen,
    Understood.

    Kommt ein bisschen auf den Zusammenhang an. Wenn das so mitten im Quellcode steht (also keine Deklaration von irgendwas), dann sind das Casts im alten C Stil. Und zwar wird Blubb beim ersten Fall in einen void** (zeiger uaf Zeiger auf void) gecasted, und im zweiten Fall zu void* (Zeiger auf void). Ein Cast bedeutet, dass das gecastete Objekt als ein anderer Datentyp aufgefasst wird, als es eigentlich ist. Leider ist bei den Casts im alten C-Stil nicht immer genau klar, was da technisch passiert. Das kann eine recht harmlose Umwandlung sein oder wildeste Reinterpretation des Inhalts von Blubb. Kommt auf den Typ von Blubb an.



  • In welchen Fällen würde das Casten von Variablen ratsam sein, und so wie Du es beschrieben hast, könnte ich auch

    (void)Blubb
    

    schreiben?


  • Mod

    Understood schrieb:

    In welchen Fällen würde das Casten von Variablen ratsam sein,

    Ein bisschen deutet ein Cast fast immer auf einen Fehler hin. Der häufigste legitime Cast ist, wenn man verhindern oder erzwingen will, dass eine bestimmte Überladung einer Funktion benutzt wird, obwohl der Typ eigentlich nicht passt, zum Beispiel einen Integer in einen Fließkommatyp casten, weil man im folgenden mit Fließkommazahlen weiterrechnen will, beziehungsweise umgekehrt.
    Es kommt auch manchmal im Zusammenhang mit Polymorphie vor, in C++ spricht man dann von einem dynamic_cast (brauche ich selber aber selten bis nie).
    Diese beiden Arten zu casten sind relativ harmlos.
    Dann gibt es noch zwei andere Casttypen, wo die Alarmglocken läuten wenn man sie benutzt. Diese sind technischer Natur und man sagt da dem Compiler, dass man etwas besser weiß als er und dass er gefälligst das Maul halten soll und keinen Felher generieren will. Mit diesen Arten von Casts kann man die constness von Objekten entfernen oder den Speicherbereich den Objekte belegen als einen ganz anderen Objekttyp auffassen als ursprünglich gedacht. ⚠ Wenn man dies benutzt sollte man aber ganz genau wissen, was man tut!

    und so wie Du es beschrieben hast, könnte ich auch

    (void)Blubb
    

    schreiben?

    Nein, denn von void kann es keine Instanzen geben.



  • Danke, SeppJ, dass wäre vorerst alles.

    Sollten weitere Fragen auftreten werde ich diese hier hineinposten.

    Mit freundlichen Grüßen,
    Understood.



  • SeppJ schrieb:

    und so wie Du es beschrieben hast, könnte ich auch

    (void)Blubb
    

    schreiben?

    Nein, denn von void kann es keine Instanzen geben.

    Das stimmt nicht. C++ erlaubt das Casten nach void von beliebigen Typen. Diese Sonderregel findet vor allem in Makros wie assert Anwendung.

    Static cast, §5.2.9/4 schrieb:

    Any expression can be explicitly converted to type “cv void.” The expression value is discarded.



  • Neue Fragen im ersten Post hinzugefügt.

    8. Was bedeutet folgende Zeile?

    System::Media::Soundplayer ^player
    

    9. Bezieht sich auf Frage 8.:
    Warum ist ein Häuschen-Zeichen (^) vor dem player?

    10. Warum kann ich viele Befehle der folgenden Seite nicht nutzen?
    http://msdn.microsoft.com/en-us/library/52cs05fz(v=VS.71).aspx

    Vielen Dank für Antworten.

    Mit freundlichen Grüßen,
    Understood.



  • Understood schrieb:

    Neue Fragen im ersten Post hinzugefügt.

    8. Was bedeutet folgende Zeile?

    System::Media::Soundplayer ^player
    

    9. Bezieht sich auf Frage 8.:
    Warum ist ein Häuschen-Zeichen (^) vor dem player?

    10. Warum kann ich viele Befehle der folgenden Seite nicht nutzen?
    http://msdn.microsoft.com/en-us/library/52cs05fz(v=VS.71).aspx

    3 Fragen, eine Antwort: du programmierst nicht in C++, sondern in C++/CLI.



  • Ad aCTa schrieb:

    > inline <Rückgabetyp> <Funktionsname>(<Parameter>). Was bedeutet das inline?
    [...]

    IMHO sollte man das bei einer Erklärung in zwei Aspekte aufteilen:
    1. Was ist "Inlining"?
    2. Die Rolle von "inline-Funktionen".

    ...wobei ich ausdrücklich betonen will, dass ich mit "inline-Funktion" eine Funktion meine, die entweder mit "inline" dekoriert wurde oder "implizit inline" ist, da sie innerhalb einer Klassendefinition definiert wurde.

    Ersteres wurde hier schon erklärt. Das "Inlining" ist Sache des Compilers. Es verändert nicht die Bedeuting eines Programms, da die Optimierung auf Basis der "as-if"-Regel durchgeführt wird.

    Der zweite kam hier meiner Meinung nach etwas zu kurz. Die Eigenschaft "inline/non-inline" einer Funktion verändert tatsächlich die Bedeutung des Programms. Der C++ Standard enthält Sonderregeln für inline-Funktionen. Ich verweise mal auf die "one-definition-rule". Diese behandelt nämlich inline-Funktionen anders als non-inline-Funktionen. Inline-Funktionen dürfen mehrfach definiert werden, solange nur maximal eine Definition innerhalb einer Übersetzungseinheit auftaucht und diese Mehrfachdefinitionen "äquivalent" sind. Eine weitere Regel besagt, dass wenn eine inline-Funktionen in einer ÜE benutzt wird, diese ÜE auch eine Definition dieser Funktion enthalten muss. Wenn man sich an diese Regeln hält, sollte es klar sein, dass ein Compiler es leichter hat eine inline-Funktion tatsächlich zu "inlinen"; denn auch wenn der Compiler ÜEs separat behandelt, liegen all die nötigen Informationen vor, die der Compiler braucht, um eine inline-Funktion zu "inlinen" zu können.

    Ob ein Compiler tatsächlich dieses "Inlining" durchführt, hängt typischerweise von Optimierungseinstellungen und Heuristiken ab. Ein "inline"-Schlüsselwort braucht diese Entscheidung gar nicht zu beeinflussen (as-if Regel). Aber die Idee ist, dem Compiler damit zu signalisieren, dass man es gerne etwas schneller haben würde an dieser Stelle -- zB wenn die Funktion irgendwo sehr oft in einer zeitkritischen Schleife aufgerufen wird.

    kk



  • 11. Was bedeutet, wenn man Funktion schreibt und danach beispielsweise ein ": bVariable" macht?

    void Function(int Par1, int Par2) : bVariable { ...; }
    

    Hoffe Ihr könnt mir helfen 😉

    Mit freundlichen Grüßen,
    Understood.


  • Mod

    Das gibt es nicht bei gewöhnlichen Funktionen. Die Schreibweise gibt es nur bei Konstruktoren, da nennt sich das Initialisierungsliste und wie der Name schon sagt initialisiert das Membervariablen mit den angegebenen Parametern. Wwobei du im Beispiel keine hast, was ziemlich sinnlos ist, weil die Member ohnehin Default-initialisiert werden wenn sie nicht in der Initialisierungliste auftauchen.

    Es gibt noch eine uralte C Schreibweise für Funktionsparameter die recht ähnlich aussieht, aber ich glaube nicht, dass du die meinst. Die wird soweit ich weiß in C++ (und glaube auch in neuerem C) nicht mehr (offiziell) unterstützt.



  • hausaufgabe?



  • @Understood
    Ich hoffe du lernst nicht mit der Schrott DVD von Video2Brain C++, der Typ da lässt ganz vieles einfach weg und scheint auch nicht der große Crack in C++ zu sein. Die 3 DVDs sind noch fast schlimmer als das Buch C++ von A bis Z, was dem Leser bei Hintergrundwissen auch im Regen stehen lässt.

    Es gibt echt eine menge Schrottbücher zu C++, die meisten eigentlich. Warum das so ist wurde hier auch schon diskutiert.



  • Ich habe ein Video-Tutorial (Einstieg für Anspruchsvolle), dann 2 Bücher - C++ - Lernen und Professionell anwenden und Einstieg in C++.
    Das Buch Einstieg in C++ wurde mir von meiner AutoIt-Community empfohlen, C++ - Lernen und Professionell anwenden war letztendlich meine eigene Entscheidung.

    Das Video-Tutorial wollte ich haben, um immer mal kurz und auf die schnelle etwas erklärt zu bekommen.

    Mit freundlichen Grüßen,
    Understood. 😉


Anmelden zum Antworten