O
TyRoXx schrieb:
Parameter standardmäßig auf irgendwelche magischen Werte zu setzen halte ich für unnötig und gefährlich.
Warum?
Standardparameter, ob nun durch Überladung oder ohne, sind meistens eine schlechte Idee.
Warum?
Solche Parameter neigen dazu niemals vom Aufrufer gesetzt zu werden, sodass man sich den Parameter auch hätte sparen können.
Nein, denn die Version mit 3 Parametern könnte aus der Programmierersicht immer noch sinnvoll sein. Die alternative wäre eine weitere Funktion mit anderem Namen mit eben diesen parametern hinzuzufügen, aber das sugeriert dem Anwender eine Wichtigkeit der Funktion, die diese nicht hat.
(Ich hab ein recht gutes Beispiel dafür. Ich muss ein paar teure numerische Verfahren berechnen, die intern auch ein paar recht große matrizen und vektoren miteinander multiplizieren. In einigen Anwendungen werden eben jene Multiplikationen aber schon durchgeführt -> weiterer optionaler parameter der die Laufzeit erheblich reduziert. Dazu gibt es dann die überladene Variante, die diese multiplikationen vorberechnet und dann die andere Funktion aufruft.)
Ausnahmen sind so Dinge wie std::vector::resize(size_type, T = T()) , die erstens allgemein bekannt und zweitens einigermaßen intuitiv und sinnvoll sind.
Warum ist Bekanntheit ein positives Kriterium? Ist das ein Argument in dem Sinne von "ist halt schon lange da, also darf es so bleiben"? Für den Aufrufer macht es ja keinen Unterschied. Und warum glaubst du, dass die meisten Standardparameter nicht intuitiv sind?