Optionale Referenzen
-
Hallo,
eine kurze und simple Frage. In diesem Code
void foo (std::string bla = "");mache ich das Argument bla durch Definieren eines Defaultwertes ja mehr oder weniger optional, sprich ich kann es beim Aufruf weglassen. Wie kann ich nun selbiges bei Verwendung von Referenzen erhalten, da
void foo (std::string &bla = "");nicht funktioniert?
Danke
-
Referenzen müssen immer auf andere Instanzen zeigen. Das geht ja bei Konstanten schlecht. Eine konstante Referenz wäre hier aber möglich. Was willst du denn erreichen?
-
Du könntest ja z.B. ein "dummy" Objekt als Defaultwert übergeben.
-
const std::string &bla = ""
-
Braunstein schrieb:
Was willst du denn erreichen?
Ich möchte Funktionen, denen ich Objekte als Referenz übergeben kann, es aber nicht muss.
const ref schrieb:
const std::string &bla = ""Das funktioniert. Mal sehen, ob das immer als Lösung verwendbar ist.
-
basti33 schrieb:
Ich möchte Funktionen, denen ich Objekte als Referenz übergeben kann, es aber nicht muss.
In diesem Fall wären Zeiger zu verwenden.
-
Mach doch einfach 2 Funktionen?!?
-
hustbaer schrieb:
Mach doch einfach 2 Funktionen?!?
Es ändern sich ja nur ein paar Zeilen. Wenn ich deshalb gleich eine zweite Funktion plane muss ich irgendwie an das Sprichwort "Die dümmsten Programmieren schreiben die dicksten Programme" denken.

Nanyuki schrieb:
In diesem Fall wären Zeiger zu verwenden.
Ja, aber die sind "schwieriger" zu verwenden als Referenzen. Ich suche halt nach dem einfachsten Weg.
-
Dann mach halt irgendwie sowas:
void do_func(std::string *s); void func(std::string &s) { do_func(&s); } void func() { do_func(0); } void do_func(std::string *s) { // s==0 heisst dann keine referenz uebergeben // bla bla }
-
Es ändern sich ja nur ein paar Zeilen. Wenn ich deshalb gleich eine zweite Funktion plane muss ich irgendwie an das Sprichwort "Die dümmsten Programmieren schreiben die dicksten Programme" denken.
Die eine Funktion kann ja die andere aufrufen?!?
Die dümmsten Programmierer sehen die einfachsten Lösungen nicht
-
Man könnte auch ein dummy-Objekt übergeben:
template<class T> struct dummy { static T the_dummy; }; void blah(int &x = dummy<int>::the_dummy) { }