Wieso "const" verwenden?
-
Blue-Tiger schrieb:
...es ist bei den const-Methoden ja eigentlich nur ein layouttechnischer "Hack"...
Also ich empfinde eher das "präfix-const" (also die Situation, in der sich das const auf das nachfolgende Token bezieht) als "Hack", weil er die Ausnahme ist. "postfix-const" funktioniert/gilt immer und überall ... präfix-const nur in dem einen Ausnahmefall.
Gruß,
Simon2.
-
Bei
int * const p = ...;
finde ich eher das alleine stehende * viel viel störender.
-
Fellhuhn schrieb:
Bei
int * const p = ...;
finde ich eher das alleine stehende * viel viel störender.
int* const p; int *const p;
Der * darf sich aussuchen mit wem er kuscheln will, damit er nicht gar so allein ist
-
Schon klar, nur sehe ich häufig in dem Code mit dem ich arbeite. Das stört mich ziemlich, da es die Lesbarkeit in meinen Augen ruiniert.
-
Fellhuhn schrieb:
Schon klar, nur sehe ich häufig in dem Code mit dem ich arbeite. Das stört mich ziemlich, da es die Lesbarkeit in meinen Augen ruiniert.
Ich habe es extra hier herausgetrennt da mit const immer die Frage ist: zu welcher Seite man den Stern schreibt (ich bevorzuge ihn näher am Datentyp, sofern der Wert nicht const ist).
cu André
-
asc schrieb:
Bei den folgenden Schreibweisen hat man den Vorteil direkt ablesen zu können was const ist (von rechts nach links):
geht auch von links nach rechts
//umgekehrt (li nach re) int const * value; //int-konstanten-zeiger int const * const value; //int-konstanten-zeiger-konstante
und wenn du's so liest kommst du um die postfix-schreibweise gar nicht mehr rum.
-
stylecheck-freak schrieb:
drakon schrieb:
Also Stroustrup weisst auf die Möglichkeit hin, sagt aber dann auch, dass es Geschmackssache ist.
so zieht er sich öfter aus der affäre. wenn er ehrlich wäre, würde er sagen: 'sorry leute, aber ich habe da ganz grossen mist gebaut!'
Das hat was. So auch mit der do/while - Schlaufe, von der er persönlich sogar abrät.
Nochmal zu Stroustrup: Er bevorzugte, wenn ich mich richtig erinnere, die Präfix-Variante von 'const' und hat mich dadurch überzeugt, die Postfix-Variante zu verwenden (nicht, um ihm zu widersprechen, sondern weil er zugab, dass es eigentlich keinen Grund für die Präfix-Variante gibt, sehr wohl aber Argumente für die andere).
Ja, so weit ich mich erinner,hat er tatsächlich die präfix - Variante gebraucht. Warum er das macht leuchtet mir nicht ganz ein. Habe im Kopf, dass es ihm besser gefällt, aber wie wir sehen, hat die andere Variante Vorteile (macht auch mehr Sinn). Aber auch Stroustrup ist nur ein Mensch.
-
do/while ist super, soll hier keiner was gegen do/while sagen!
(mein ernst)
-
Allerdings sieht man bei einem const typ schneller, dass es sich um eine Konstante handelt und imho sind die Modifier zunächst viel wichtiger als der Typ, den man bei Interesse ja sowieso am R-Wert erkennt.
-
Und es kommt der natürlichen Sprache entgegen, ich sag jedenfalls lieber "konstanter Integer" als "Integer, der konstant ist".
-
Tyrdal schrieb:
Und es kommt der natürlichen Sprache entgegen, ich sag jedenfalls lieber "konstanter Integer" als "Integer, der konstant ist".
"Integerkonstante" :p
Eigentlich finde ich das recht einfach und konsistent:
// "Die Variable ist ein(e) ... int // "... Integer" int const // "... Integerkonstante" int * // "... Integerzeiger" int const * // "...Integerkonstantenzeiger" int const * const // "...Integerkonstantenzeigerkonstante"
Gerade im Deutschen geht das ziemlich gut, weil wir diese Form von "Rückwärts-Komposita" haben. Die Franzosen dürften sich da viel schwerer tun.
Dieses "spricht-sich-komisch-Gefühl" kommt eigentlich eher durch die "Englischprägung" in diesem Bereich. (*)
Warum will man sagen "Konstante eines Zeigers auf ein Integer" ?
Man sagt doch auch nicht "Knopf von Hose von Wärter von Schranke" sondern "Schrankenwärterhosenknopf".
Gruß,
Simon2.
P.S.: (*) Wenn ich mich recht entsinne, ist in den englischen Programmierhandbüchern sogar immer die Rede von "integer constants" ... vielleicht entsteht unser "Seltsamgefühl" auch eher aus der Angewohnheit "const" als Adjektiv zu verstehen statt als Substantiv.
-
Nunja, aber ums konsistent zu halten müssten alle modifier rechts stehen.
Aber ich find int long unsigned als Extrem mal sehr merkwüdig.
-
Simon2 schrieb:
Tyrdal schrieb:
Und es kommt der natürlichen Sprache entgegen, ich sag jedenfalls lieber "konstanter Integer" als "Integer, der konstant ist".
"Integerkonstante" :p
Eigentlich finde ich das recht einfach und konsistent:
// "Die Variable ist ein(e) ... int // "... Integer" int const // "... Integerkonstante" int * // "... Integerzeiger" int const * // "...Integerkonstantenzeiger" int const * const // "...Integerkonstantenzeigerkonstante"
Gerade im Deutschen geht das ziemlich gut, weil wir diese Form von "Rückwärts-Komposita" haben. Die Franzosen dürften sich da viel schwerer tun.
Dieses "spricht-sich-komisch-Gefühl" kommt eigentlich eher durch die "Englischprägung" in diesem Bereich. (*)
Warum will man sagen "Konstante eines Zeigers auf ein Integer" ?
Man sagt doch auch nicht "Knopf von Hose von Wärter von Schranke" sondern "Schrankenwärterhosenknopf".
Gruß,
Simon2.
P.S.: (*) Wenn ich mich recht entsinne, ist in den englischen Programmierhandbüchern sogar immer die Rede von "integer constants" ... vielleicht entsteht unser "Seltsamgefühl" auch eher aus der Angewohnheit "const" als Adjektiv zu verstehen statt als Substantiv.
Schöne Herleitung!
Ich denke das ist eh bei jedem anders dieses Gefühl.. Obwohl ich auch der Meinung bin, dass man es immer (wenn möglich) gleich machen sollte. - Aber eben Geschmackssache.
-
Wobei man das mit dem immer gleich machen bei Leuten die mehr Sprachen als nur C++ verwenden auch anders sehen kann. Bei C# z.B. geht nur const int, und bei Java afaik auch nur final int
-
Präfixconstnutzer schrieb:
Wobei man das mit dem immer gleich machen bei Leuten die mehr Sprachen als nur C++ verwenden auch anders sehen kann. Bei C# z.B. geht nur const int, und bei Java afaik auch nur final int
Das ist klar, dass man die Angewohnheiten nicht in andere Sprachen übertragen soll. Ich denke, dass hier alle davon ausgegangen sint, dass es auf C++ beschränkt ist. Bei anderen Sprachen kannes unter Umständen ja auch andere Auswirkungen haben.
-
Präfixconstnutzer schrieb:
Wobei man das mit dem immer gleich machen bei Leuten die mehr Sprachen als nur C++ verwenden auch anders sehen kann. Bei C# z.B. geht nur const int, und bei Java afaik auch nur final int
Das heißt aber nicht das man es gut finden muss
Ich kenne mehrere Sprachen, und mich stört es das ich einen Übergabeparameter (korrigiere mich wenn ich mich irren sollte) nicht const deklarieren kann. Nichts gegen das automatische Call-By-Reference bei Objekten, aber ich habe gerne Compilerunterstützung wenn es darum geht zu sichern das es nicht immer verändert werden kann.
cu André