Nachimplementierung von Referenzen
-
Ich will eine "Referenz" nachimplementieren, sprich,
einen Zeiger in einer Zeile deklarieren und definieren.int main(void) { // das will ich machen // ich weiß es geht nicht. int *o = &int(8); // so geht es auch nicht int *p = &(int(7)); }Er gibt mir hier folgenden Fehler aus.
> main.cpp: In function 'int main()':
> main.cpp:8:21: error: lvalue required as unary '&' operand
Was meint er damit?
Muss ich dafür einen umweg über eine Lambda-Funktion machen?
Danke schon mal im Vorraus,
schildi48
-
Ich will eine "Referenz" nachimplementieren, sprich,
einen Zeiger in einer Zeile deklarieren und definieren.Du meinst wohl, einen Zeiger in einer Zeile definieren und initialisieren.
Das nähste Äquivalent einer Referenz in Zeigerform ist ein konstanter Zeiger.
int* const ptr = ...;Aber man kann keine Temporary an einen Zeiger binden wie bei einer
const-Referenz, das kannst du von vornherein abhaken.Die wichtigste Frage im Moment ist jedoch:
Wofür brauchst du das eigentlich?Edit³:
Was meint er damit?
Dass du nur von einem lvalue die Adresse nehmen kannst. Ich werde jetzt aber nicht erklären, was ein lvalue ist.
Muss ich dafür einen umweg über eine Lambda-Funktion machen?
Jetzt bin ich endlos verwirrt. Wie soll denn das helfen? Und wie kommst du darauf?
-
schildi48 schrieb:
Ich will eine "Referenz" nachimplementieren
Warum, was sollte das bringen?
schildi48 schrieb:
// das will ich machen // ich weiß es geht nicht. int *o = &int(8);Das würde auch keinen Sinn machen. Der Zeiger wäre sofort ungültig, da es sich um ein temporäres Objekt handelt. Darum verweisen sowohl Zeiger als auch Referenzen auf andere Variablen, oder dynamisch angelegte Objekte.
schildi48 schrieb:
Muss ich dafür einen umweg über eine Lambda-Funktion machen?
Was haben Lambda-Ausdrücke damit zu tun?
schildi48 schrieb:
Danke schon mal im v******
Voraus

-
Nexus schrieb:
Was haben Lambda-Ausdrücke damit zu tun?
auto acht = []{return 8;};
-
Lambdas erlauben es, den Blödsinn formal korrekt aufzuschreiben.
int *p = [](){int i=8;return &i;}();
-
lahmbda schrieb:
Lambdas erlauben es, den Blödsinn formal korrekt aufzuschreiben.
int *p = [](){int i=8;return &i;}();.< und einer, der so fragt wie der TE, der denkt sich dann auch, dass solcher Code gut ist...

An den TE: Übernimm das ja nicht. Das wird knallen!