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
- typenameauto 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
- registergibt 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.