Wenn eine Funktion int zurückgeben, kann ein int zugewiesen?
Wenn eine Funktion gibt ein int, kann es zugeordnet werden, die durch einen int-Wert? Ich sehe es nicht, macht viel zu viel Sinn zu zuweisen eines Wertes zu einer Funktion.
int f() {}
f() = 1;
Bemerkte ich, dass, wenn die Funktion liefert eine Referenz auf ein int ist, ist es ok. Ist es nur bei int? wie sieht es mit anderen Typen? oder irgendwelche anderen Regeln?
int& f() {}
f() = 1;
- was wäre der Punkt zum zuweisen eines Wertes zu einer Funktion ? Warum nicht verwenden, sondern eine variable ?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die erste Funktion gibt einen integer-by-value, das ist ein r-Wert. Sie kann nicht zuordnen, zu einem r-Wert im Allgemeinen. Die zweite f() liefert eine Referenz auf einen integer, der ein l-Wert -, so dass Sie zuordnen können.
Hinweis: Sie müssen nicht einen Wert zuweisen, die Funktion, Sie weisen Sie einfach auf Ihre Rückkehr Wert.
Seien Sie vorsichtig mit dem folgenden:
Du bist Rückgabe einer Referenz auf eine temporäre, die ist nicht mehr gültig, nachdem die Funktion zurückkehrt. Der Zugriff auf die Referenz ruft ein Undefiniertes Verhalten.
int i;
. Es ist nur ein temporärer Wert. Es dar nicht eine memory location.std::string
, der zurückgegebene Wert (was ist eigentlich ein r-Wert) entsprechen wird in ein string-Objekt, und Sie könnte zuweisen. Das gleiche gilt für eineint&
Rückgabewert. In diesem Fall wird der "Wert" zurückgegeben (das ist ein l-value) entspricht einem int Objekt, und Sie zuordnen können. Ein Objekt ist erforderlich, weil sich eine Zuordnung ändert einen gespeicherten Zustand.Es ist nicht zu begrenzen int nur, aber für die primitiven Datentypen gibt es keinen Punkt in es zu tun. Es ist nützlich, wenn Sie Ihre Klassen
operator[]
vonvector<int>
sind sinnlos?Wenn eine Funktion ein Objekt per Wert, dann Zuordnung nicht möglich ist, obwohl der Aufruf der Funktion ist ein rvalue. Zum Beispiel:
Dieser erstellt eine temporäre string-Objekt, mutiert es und dann sofort zerstört. Beispiel aus der Praxis ist:
Du nicht schreiben konnte
list.begin() + 1
, da neben ist nicht möglich auf die Liste Iteratoren, aber der Schrittweite ist in Ordnung. Dieses Beispiel beinhaltet nicht die Zuweisung, sondern die Zuweisung ist nur ein spezieller Fall der mehr Allgemeinen Regel "member-Funktionen aufgerufen werden können, auf rvalues".++list.begin()
ist nicht erforderlich, um zu arbeiten. Der operator implementiert werden kann als eine freie Funktion, die akzeptiert, dass eine nicht-const Referenz und nicht die Bindung zu der temporäre iterator.