Wo kann das kaufmännische Und “&” gesetzt werden, wenn ein Argument als Referenz übergeben wird?
Lesezeit: 3 Minuten
römisch
In den Beispielen, die ich gesehen habe, wurden die Argumente auf folgende Weise als Referenz übergeben:
void AddOne(int &y)
In dem Code, den ich habe, sehe ich die folgende Syntax:
void AddOne(int& y)
Ich frage mich, ob es dasselbe ist oder ob sich der zweite Fall irgendwie vom ersten unterscheidet.
Leerzeichen in C++ spielen keine Rolle. Du könntest es tun void AddOne(int & y) wenn du wolltest.
– Chris
13. März 2013 um 16:02 Uhr
@chris: Das stimmt nicht ganz. unsignedint und unsigned int sind verschiedene Folgen von Token. Der in dieser Frage gezeigte Code unterscheidet sich jedoch nicht in den Token.
– Ben Voigt
13. März 2013 um 16:04 Uhr
Für das, was es wert ist, denke ich, dass die zweite Option klarer ist; int& ist die Art von y.
– JSQuareD
13. März 2013 um 16:09 Uhr
@JSQuareD: Ich bevorzuge int &y (wenn ich mehr denke), besonders wenn Sie mehr als eine Variable in derselben Zeile deklarieren. Ich meine, wenn ich schreibe int& y=i, x=i. Ist x ein Hinweis hier? Scheint verwirrend? Aber int &y=i, x=i ist etwas besser, finde ich.
– Nawaz
13. März 2013 um 16:09 Uhr
@BenVoigt, darüber habe ich nachgedacht. Mir ist keine gute Formulierung dafür eingefallen. Es normalerweise spielt keine Rolle, aber wenn doch, scheint es eher gesunder Menschenverstand zu sein. Wenn beides funktioniert, macht es Sinn, dass der Abstand keinen Unterschied macht.
– Chris
13. März 2013 um 16:10 Uhr
Beide sind exakt das Gleiche. Überhaupt kein Unterschied.
Alles, was zählt, ist das & sollte zwischen sein Typ und die Variable Name. Leerzeichen spielen keine Rolle.
Das verwirrt mich wirklich, kümmert sich nicht der Code-Formatierer darum, also alles & * folgt der C++-Standardformatierung.
– Harun Hajem
3. Dezember 2020 um 13:01 Uhr
@HarounHajem: Natürlich kann sich ein Codeformatierer darum kümmern, aber IF int& y und int &ybeispielsweise semantisch nicht identisch sind, dann ist es der Code-Formatierer nicht erlaubt, ein Formular in ein anderes zu formatieren, da dies ein Fehler sein wird. Nur wenn diese unterschiedlichen Formen identisch sind, kann der Code-Formatierer sie entsprechend formatieren bevorzugt bilden. Hoffe das hilft dir und jetzt ist es nicht mehr verwirrend.
– Nawaz
3. Dezember 2020 um 17:26 Uhr
Dasselbe gilt für die Sprache, nur andere Codekonventionen
4pie0
Es gibt keine Unterschiede zwischen
void AddOne(int &y);
und
void AddOne(int& y);
und sogar
void AddOne(int&y);
in C++, da die Leerzeichen zwischen den tatsächlichen Token verworfen werden.
Es ist eine Frage des Stils. Beides ist richtig und gültig.
Es scheint jedoch, dass Bjarne Stroustrup das Setzen bevorzugt & und * neben dem Typnamen, wobei der Typ der Variablen hervorgehoben wird:
int* i; // i is a pointer to an int
int& j; // j is a reference to an int
Leerzeichen in C++ spielen keine Rolle. Du könntest es tun
void AddOne(int & y)
wenn du wolltest.– Chris
13. März 2013 um 16:02 Uhr
@chris: Das stimmt nicht ganz.
unsignedint
undunsigned int
sind verschiedene Folgen von Token. Der in dieser Frage gezeigte Code unterscheidet sich jedoch nicht in den Token.– Ben Voigt
13. März 2013 um 16:04 Uhr
Für das, was es wert ist, denke ich, dass die zweite Option klarer ist;
int&
ist die Art vony
.– JSQuareD
13. März 2013 um 16:09 Uhr
@JSQuareD: Ich bevorzuge
int &y
(wenn ich mehr denke), besonders wenn Sie mehr als eine Variable in derselben Zeile deklarieren. Ich meine, wenn ich schreibeint& y=i, x=i
. Istx
ein Hinweis hier? Scheint verwirrend? Aberint &y=i, x=i
ist etwas besser, finde ich.– Nawaz
13. März 2013 um 16:09 Uhr
@BenVoigt, darüber habe ich nachgedacht. Mir ist keine gute Formulierung dafür eingefallen. Es normalerweise spielt keine Rolle, aber wenn doch, scheint es eher gesunder Menschenverstand zu sein. Wenn beides funktioniert, macht es Sinn, dass der Abstand keinen Unterschied macht.
– Chris
13. März 2013 um 16:10 Uhr