Returnwert von "int fkt(){}" ?
-
heyho,
folgendes Bsp.:
#include <iostream> using namespace std; int fkt() { int ret = 7; return ret; } int main() { fkt() = 123; system("pause>nul"); return 0; }Ich dachte immer, wenn ich "return ret" mache wird eine Kopie von "ret" erstellt und diese dann zurückgegeben,
wie auch bei abstrakte Datentypen.Wenn ich nun aber "fkt() = 123" mache, dann bekomm ich eine Fehlermeldung, dass fkt() einen non-lvalue zurückgibt.
Heißt das, dass bei vordefinierten Datentypen in so einem Fall der Variableninhalt, also einfach "7" zurückgegebn wird?
Wenn dem so ist, dann ist ja
const int fkt(){...}das const immer Schwachsinn oder?
thx schonma

-
Ja, das const ist immer Schwachsinn

Es wird eine Kopie erstellt, aber die ist laut Sprachdefinition ein R-Value, kann also nur rechts vom = stehen. Damit so sinnlose Sachen erst gar nicht gemacht werden. Da kann man dann mit den Registern schneller und so.
MfG SideWinder
-
Das Problem da ist, ist, dass ein Funktionsaufruf keine Variable, sondern ein Ausdruck darstellt. Und einem Ausdruck etwas zuweisen macht nicht viel Sinn.
Das hier macht ja auch nicht viel Sinn:
7 = 5;In beiden Fällen haben wir es mit einem R-value zu tun, wo du sinnvollerweise nichts zuweisen kannst.
In deinem Beispiel macht es keinen Sinn ja. Allerdings muss da immer der Typ ebenfalls beachtet werden, wenn man da einen allgmeinen Schluss draus ziehen will.
-
drakon schrieb:
Und einem Ausdruck etwas zuweisen macht nicht viel Sinn.
Und Unsterbliche heben verlorene Kinder mit feurigen Armen zum Himmel empor. Was ist mit
a[b] = c;Das macht nicht viel Sinn?

-
a[b] ist aber auch kein R-Value wie 7 oder fkt()
MfG SideWinder
-
Dweb schrieb:
Wenn ich nun aber "fkt() = 123" mache, dann bekomm ich eine Fehlermeldung, dass fkt() einen non-lvalue zurückgibt.
Geht doch
#include <iostream> int i; int &fkt() { return i; } int main() { fkt() = 123; // <--- :open_mouth: std::cout << i; }
-
µngbd schrieb:
a[b] = c;Das macht nicht viel Sinn?

wenn a,b,c variablen vom typ int sind, sind nur die Namen doof gewählt.
Im Context könnte das sehr viel Sinn machen ?