Wo kann das kaufmännische Und “&” gesetzt werden, wenn ein Argument als Referenz übergeben wird?

Lesezeit: 3 Minuten

Benutzer-Avatar
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.

So

void AddOne(int&  y);
void AddOne(int  &y);
void AddOne(int & y)
void AddOne(int   &     y);
void AddOne(int&y);

sind gleich!

  • ebenso gut wie int&y (kein Platz).

    – Ben Voigt

    13. März 2013 um 16:04 Uhr

  • 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

Benutzer-Avatar
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

Siehe hier für die Hinweise: https://www.stroustrup.com/bs_faq2.html#whitespace

Siehe Beispiele im Buch „Programming Principles and Practices using C++“ und hier für Referenzen: https://stackoverflow.blog/2019/10/11/c-creator-bjarne-stroustrup-answers-our-top-five-c-questions/

1018930cookie-checkWo kann das kaufmännische Und “&” gesetzt werden, wenn ein Argument als Referenz übergeben wird?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy