Referenzen als Parameter

DuffCola

Mitglied
Hallo.
Ich habe mal eine Frage, und zwar habe ich eine Funktion:

Code:
void Foo(int &x)
{
    x++;
}

Jetzt funktioniert die Funktion ja auch einwandfrei, wenn ich als Parameter eine Variable übergebe:

Code:
int a = 0;
Foo(a);

Wenn ich jetzt aber z.B. einfach einen Wert statt der Variable übergeben will, gibts ne Fehlermeldung:

Code:
Foo(99);

Error:
IntelliSense: Keine Instanz des Konstruktors ""Contact::Contact"" stimmt mit der Argumentliste überein.

Klar, ich verstehe die Fehlermeldung, aber wie sieht der Syntax aus, wenn ich direkt einen Wert übergebe, und kann mit vielleicht einer erklären, warum das nicht geht(ich kann es mir teilweise denken, aber bin mir da eher unsicher)?
 
Das Problem dabei ist, dass die 99 die du übergibst, konstant ist. Du kannst sie nicht ändern (du kannst ja auch nicht z.B. 99++ schreiben). Die Referenz ist jedoch nicht konstant. Da die Gefahr gegeben ist, dass der konstante Wert durch die nicht-konstante Referenz geändert wird, gibt es eine Fehlermeldung. Bekommt die Funktion eine const int&, funktioniert es.

Lg
 
Ohne das jetzt standardkonform aus dem Kopf beantworten zu können:

Einfach const hintun löst vllt. das Compilerproblem hier,
kann aber je nach Funktion einfach falsch sein, wenn man den Wert innen doch ändern will.

Gut, wenn man ein Rvalue wie 99 etc. übergibt ist man wahrscheinlich nicht daran interessiert, Änderungen auch außerhalb der Funktion mitzubekommen
(eben weil keine Variable zum Aufnehmen da ist).
Aber die Funktion kann nicht wissen, ob man sie nicht doch manchmal mit Variable aufruft
und sollte für den Fall auch entsprechend funktionieren.
 
Zurück