Gibt es einen Unterschied zwischen den folgenden Erklärungen?
void somefunc(const Person &p);
void somefunc(Person const &p);
Antworten:
Es gibt keinen Unterschied . constbindet an den Typ links davon ... es sei denn, es ist der erste Teil der Deklaration. In diesem Fall bindet es rechts.
Siehe: https://isocpp.org/wiki/faq/const-correctness#const-ref-alt
Persönlich finde ich, dass const T &xdas besser liest. Nach diesem , Bjarne zieht auch die setzte consterst. Insbesondere, weil das Schlüsselwort ursprünglich aufgerufen werden sollte readonlyund readonly int xbesser lautet :-P.
Ja da ist! der erste ist besser lesbar :)
Siehe diese http://www.parashift.com/c++-faq-lite/const-correctness.html
(Siehe stattdessen neuen Link: https://isocpp.org/wiki/faq/const-correctness#const-ref-alt )
Insbesondere 18,6 bis 18,8.
[18.6] Was bedeutet "const Fred & x"?
Dies bedeutet, dass x ein Fred-Objekt aliasisiert, aber x kann nicht zum Ändern dieses Fred-Objekts verwendet werden.
[18.7] Ist "Fred & const x" sinnvoll?
Nein, das ist Unsinn.
[18.8] Was bedeutet "Fred const & x"?
Fred const & x ist funktional äquivalent zu const Fred & x. Die eigentliche Frage ist jedoch, welche verwendet werden sollte.
Lesen Sie den Rest des Artikels für weitere Informationen. Aber im Wesentlichen heißt es, dass sie gleichwertig sind, und Sie können beide verwenden, wie Sie es für richtig halten. Sie sollten jedoch eine auswählen und dabei bleiben, um zukünftige Verwirrung zu vermeiden.
Es ist wirklich Geschmackssache.
Wenn von rechts nach links gelesen, " Person const & x" liest "x ist eine Referenz auf eine konstante Person."
Dies klingt besser als " const Person & x", was "x ist eine Referenz auf eine Person, die konstant ist" wäre.
Wenn man also mit der Leserichtung von Variablendeklarationen von rechts nach links vertraut ist, würde man vielleicht die erste bevorzugen.
Beide sind gleich.
const Person & x ist derzeit am beliebtesten, da Englisch Adjektive vor die Substantive setzt, und das macht es "englischer".
Die alternative Form Person const & x wurde als weniger idiomatische Form vorgeschlagen. Ihr Argument war, dass diese Form immer von rechts nach links analysiert werden kann: "x ist ein Verweis auf eine konstante Person." Das Argument war, dass die Klarheit der Analyse wichtiger sei als die idiomatische Struktur.
Unglücklicherweise für diese Leute behandelt ihre Form nicht alles. Sobald Sie Arrays, Funktionszeiger und andere exotische Formen sehen, brechen die Regeln zusammen. char * str [10] kann nicht von rechts nach links geschrieben werden, da sich das Array auf der rechten Seite befinden muss. void (* signal (int, void (* fp) (int))) (int) lässt die Menschen von rechts nach links vor Schmerzen zusammenzucken.
Nur die Regel ist jemals aufgetaucht, um für alle Typen einen Sinn zu ergeben, die Clockwise Spiral-Regel: http://c-faq.com/decl/spiral.anderson.html
Sobald jemand die Spirale im Uhrzeigersinn sieht, gehen normalerweise alle Hoffnungen auf eine klare Parsing-Regel aus dem Fenster. Die meisten Leute akzeptieren dann, dass const Person & x wahrscheinlich der beste Weg ist!