Ich habe den folgenden Code:Const vor oder nach dem Typ?
string const& operator[] (size_t index) const { return elems[index]; }
sollte es nicht sein:
const string&
?
Ich habe den folgenden Code:Const vor oder nach dem Typ?
string const& operator[] (size_t index) const { return elems[index]; }
sollte es nicht sein:
const string&
?
Cv-Qualifier wie const
gelten für alles, was links von ihnen ist, es sei denn, es gibt nichts, in diesem Fall gelten sie für das Recht. Für string const&
gilt die const
für die string
zu seiner Linken. Für const string&
gilt die const
für die string
zu seiner Rechten. Das heißt, sie sind beide Referenzen auf const
string
, so dass es in diesem Fall keinen Unterschied macht.
Einige Leute bevorzugen es auf der linken Seite (wie const int
), weil es von links nach rechts liest. Manche Leute ziehen es vor, es auf der rechten Seite zu haben (wie int const
), um die Verwendung des Sonderfalles zu vermeiden (int const * const
ist konsistenter als const int* const
, zum Beispiel).
Was ist 'const int * const' und' int const * const' ....? – Sangram
@ user2745266 Sie sind beide "const" Zeiger auf 'const'' int'. –
Danke für Ihre Antwort. Was ich fragen wollte, war, wie beide "const" in diesen beiden Fällen angewendet werden (welcher für int und welcher für Zeiger ist). Vielleicht hätte ich auf die richtige Weise fragen sollen. Vielen Dank. – Sangram
Es funktioniert in diesem Zusammenhang, und es ist eine Frage der persönlichen Präferenz und Kodierung Konventionen.
Einige Programmierer bevorzugen, es nach den Namen des Typs zu setzen, so dass es mit anderen Verwendungen von const
konsistenter ist. wenn Sie einen Zeiger sind erklärt zum Beispiel, wo der Zeiger selbst (und nicht die spitze zu geben) ist const
zu sein, müssen Sie es nach dem Sterne setzen:
string * const ptr;
Und falls du bist eine const
Memberfunktion deklarieren, muss es nach der Funktionsdeklaration gehen; Beispiel:
class Foo
{
void func() const;
};
Die const
auf beiden Seiten des Datentypen sein kann, so:
„const int *
“ ist dasselbe wie „int const *
“
„const int * const
“ ist dasselbe wie „int const * const
“
int *ptr; // ptr is pointer to int
int const *ptr; // ptr is pointer to const int
int * const ptr; // ptr is const pointer to int
int const * const ptr; // ptr is const pointer to const int
int ** const ptr; // ptr is const pointer to a pointer to an int
int * const *ptr; // ptr is pointer to a const pointer to an int
int const **ptr; // ptr is pointer to a pointer to a const int
int * const * const ptr; // ptr is const pointer to a const pointer to an int
Die Grundregel ist const applies to the thing left of it. If there is nothing on the left then it applies to the thing right of it.
Hier macht es keinen Unterschied. – Rapptz
In seiner reinsten Form sollte es darauf ankommen, die Dinge konsistent zu halten. Die Tatsache, dass es auf der linken Seite gehen kann, ist wirklich die Ausnahme. Das heißt, ich persönlich bevorzuge links. – chris
Ich denke, es ist einfacher, Typnamen zu lesen, wenn Sie es auf der rechten Seite setzen, aber es macht keinen Unterschied. – Simple