c++-schlüsselwörter ...



  • ... gibt es ja viele. Habt ihr alle schon mal in ernsthaften projekten verwendet?
    Ich nicht. Die folgenden hab ich noch nie gebraucht:
    - mutable
    - auto
    - register
    - wchar_t
    - explicit
    - throw
    - typename



  • ich halt schrieb:

    ... gibt es ja viele.

    63 um genau zu sein.

    Habt ihr alle schon mal in ernsthaften projekten verwendet?

    Programmieren ist kein Weitstreit mit dem Ziel möglich viele unterschiedliche Schlüsselwörter zu verwenden.

    Ich nicht. Die folgenden hab ich noch nie gebraucht:
    - mutable
    - auto
    - register
    - wchar_t
    - explicit
    - throw
    - typename

    auto und register sind nichts weiter als glorifizierte Leerzeichen. Die kannst du streichen.

    throw kommt zusammen mit Exceptionhandling. Ein Projekt das Exceptions verwendet, verwendet also auch throw.

    wchar_t wird gebraucht wenn du mehr als nur ANSI-Strings verarbeiten willst.

    mutable hilft bei der Unterscheidung von logischem und phyischem const und ist von daher im Zusammenhang mit const correctness wichtig.

    typename brauchst du spätestens wenn du einen standardkonformen C++ Compiler hast und du nicht-triviale Template baust/verwendest.

    explicit deaktiviert Konvertierungskonstruktoren und sollte eigentlich generell vor jedem Ctor mit einem Parameter stehen. Es sei denn du willst wirklich einen Konvertierungsctor bauen.

    Kurz: Bis auf auto und register würde ich die aufgezählten Schlüsselwörter in nahezu jedem nicht trivialen C++ Projekt erwarten.



  • ich halt schrieb:

    - mutable

    können die wenigsten compiler was mit anfangen

    ich halt schrieb:

    - auto

    ist veraltet, kannste weglassen

    ich halt schrieb:

    - register

    empfehlung an den compiler, für die variable ein register zu nehmen. macht er aber nur wenn's ihm passt

    ich halt schrieb:

    - wchar_t

    braucht man nur, wenn man mit 'wide chars' arbeitet (unicode etc.) kannst auch zur not 'unsigned short' nehmen

    ich halt schrieb:

    - explicit

    kenn' ich nicht.

    ich halt schrieb:

    - throw

    eine c++ exception werfen

    ich halt schrieb:

    - typename

    braucht man für templates. manchmal geht auch 'class' aber typename ist besser.

    btw: wart's ab. du kriegst bald qualifiziertere antworten als von mir 😃



  • ich halt schrieb:

    - mutable

    nicht oft, aber wenn es noetig ist, dann ist es wunderbar

    - auto
    - register

    gibt keinen grund diese zu verwenden

    - wchar_t

    nuetzlich wenn man mehr als nur die paar ASCII Zeichen unterestuetzen will

    - explicit

    essentiell. viele klassen sollten explizite ctors haben

    - throw

    essentiell. sonst waere exception handling ja nicht moeglich

    - typename

    bei templates essentiell



  • net schrieb:

    ich halt schrieb:

    - mutable

    können die wenigsten compiler was mit anfangen

    1996 ist vorbei 😉



  • net schrieb:

    ich halt schrieb:

    - auto

    ist veraltet, kannste weglassen

    Wofür wurde es denn früher gebraucht, wenn es heute veraltet ist?



  • cd9000 schrieb:

    net schrieb:

    ich halt schrieb:

    - auto

    ist veraltet, kannste weglassen

    Wofür wurde es denn früher gebraucht, wenn es heute veraltet ist?

    vielleicht um deutlich zu machen, dass es sich um eine unheimlich flüchtige variable handelt? gegenteil von static? egal. das benutzt keiner.



  • net schrieb:

    vielleicht um deutlich zu machen, dass es sich um eine unheimlich flüchtige variable handelt? gegenteil von static? egal. das benutzt keiner.

    Die Bedeutung kenn ich.
    Mich interessiert nur, wenn es heute veraltet ist, wofür wurde es dann früher verwendet?



  • cd9000 schrieb:

    Mich interessiert nur, wenn es heute veraltet ist, wofür wurde es dann früher verwendet?

    da kann ich dir leider nicht weiter helfen. aber guck' mal in irgendeine alte k&r-ausgabe. irgendwas werden die sich dabei schon gedacht haben.



  • auto kommt IIRC aus dem C-Vorgänger BCPL, jedenfalls gab es in standardisiertem C/C++ noch nie einen Grund, es zu verwenden.



  • vielleicht bekommt auto aber mit dem nächsten standard einen neuen sinn:

    auto var=/* hier unheimlich komplexes expression template einsetzen/*
    
    //zb in boost::spirit
    auto var=i|j>>k;//i,j,k sind vom typ rule<>, das ganze ergibt einen typ wie composition<alternative<rule<>,rule<> >,rule<> >
    //möglichkeit die bisher existiert(compiler erweiterung?)
    typeof(i|j>>k) var=i|j>>k;
    


  • In B (einer der beiden Vorgänger von C) gab es keine Datentypen, da hat man nur die Speicherklasse angegeben:

    auto a; /* ein 36bit-Wort namens a auf dem Stack */
    register b;
    
    a = 42; /* ist es ein integer? */
    a = a + 'abcd' /* ist es ein char? (char-Literale bestehen aus 4 9-bit Zeichen) */
    b = *a; /* huch dereferenzieren kann ichs auch wenn ich will, könnte aber abstürzen, ich weiß nicht ob der Rechner auf dem das lief sowas krummgenommen hat */
    


  • Und zu sowas ist c++ abwärtskompatibel?



  • Bashar schrieb:

    auto a; 
    register b;
    

    geht in c heute noch, aber da sind es immer 'int'
    gcc schluckt's als c, aber nicht als c++



  • net schrieb:

    Bashar schrieb:

    auto a; 
    register b;
    

    geht in c heute noch

    In C89 nicht aber in C99.


Anmelden zum Antworten