Was passiert bei direct-brace-initialisierter temporärer typedef'd reference?

Gast #7347350
Lesenswert?

Hallihallo,

Der Titel sagt eigentlich schon alles, aber hier nochmal: Was passiert bei direct-brace-initialisierung einer temporären typedef'd reference?

1
S fkt(const S & u){
2
  typedef const S & SR;
3
  //return SR(u); // #1 was passiert hier?
4
  return SR{u}; // #2 und was passiert hier?
5
}
6

7
int main(){
8
  return fkt(S{10}); // S ist "leere" Test-Klasse
9
}

Ich bin beim Herumtesten über diese Funktion gestolpert und versuche seitdem herauszufinden, wo der Unterschied zwischen #1 und #2 liegt. Ich habe schon versucht, aus cppreference schlau zu werden, bin aber gescheitert. Hat jemand eine Ahnung, was dort passiert, oder kann mir cppreference entschlüsseln..?!

MfG Deckeltyp

Gast #7347370
Lesenswert?

Das kann ich Dir zwar auch nicht sagen, aber mir gefällt dieser Ausdruck ungemein:

direct-brace-initialisierter temporärer typedef'd reference?

Herr Doktor, was habe ich? Sagen Sie mir die Wahrheit!

Nun, mein Guter -es ist eine sog.

direct-brace-initialisierter temporärer typedef'd reference?

Mein Gott -das ist ja furchtbar!

Persönliche Seite #7347385
Lesenswert?

Deckeltyp schrieb:

temporären typedef'd reference

Also wenn schon ist das lokal, aber nicht temporär. Ob lokal oder nicht spielt aber keine Rolle.

Deckeltyp schrieb:

Ich bin beim Herumtesten über diese Funktion gestolpert und versuche seitdem herauszufinden, wo der Unterschied zwischen #1 und #2 liegt.

Ich denke nicht dass es einen gibt.

Die Bastelei mit dem typedef ist komplett unnötig. Der "u" Parameter ist ja schon eine const reference. Ziemlich sinnlos da nochmal eine neue Reference draus zu machen.

Die Funktion erstellt jedenfalls eine Kopie des übegebenen Objekts. Der Rückgabetyp ist ja nur "S" (keine Referenz!), dementsprechend wird eine "S" Instanz erstellt und "u" als Parameter an den Konstruktor übergeben. Das sollte den copy constructor aufrufen.

Man hätte auch einfach "return { u };" schreiben können.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren