Dodo:
Setz doch mal deine Fantasie ein, natürlich schreibt keiner explizit "double = true". Aber stell dir folgendes vor:
Du arbeitest mit Kollegen an einer großen Software. Du hast dir eine Funktion geschrieben, die abhängig von einem oder zwei Parameter etwas ausrechnet:
double computeSomething(double param1)
{
// ...
}
double computeSomething(double param1, param2)
{
// ...
}
Nach einer Weile fällt dir auf, dass in der Funktion auch etwas schief gehen kann. Aber wie teilst du das dem Aufrufer mit? Du machst es also anders:
bool computeSomething(double &retValue, double param1)
{
// ...
}
bool computeSomething(double &retValue, double param1, param2)
{
// ...
}
Bei einem Fehler gibst du false zurück, den eigentlich Wert gibst du by-reference zurück.
Du compilierst, alles Ok. Du testest deinen Code, alles wunderbar. Du kannst auf den Fehler reagieren. Das Programm wird an einen Kunden ausgeliefert der sich nach ein paar Tagen meldet. Er schreit, tobt, ist sauer... Die Produktion steht, tausende Euro schaden. Was ist passiert?
Du hast vergessen, dass ein Kollege deine Hilfsfunktion auch nutzt:
double x, y, z;
y = 0.001;
z = 12.7;
x = computeSomething(y, z);
Aber leider macht die Funktion jetzt nicht mehr das was dein Kollege vermutet und die Software hat einen Bug. Und der Compiler hat nicht gemeckert, nichtmal eine Warning ausgegeben. Finde mal so einen Fehler in einem großen Projekt - viel Spaß!
Rate mal warum die casting Operatoren in C++ so "komisch" aussehen (z.B. dynamic_cast<int>(value)) im Gegensatz zum c-style cast . Damit erkennt man sofort an welcher Stelle im Code gecastet wird. Und das ist gut, weil man casten so weit es geht vermeiden sollte.