In vielen Sprachen verwendet man den Rückgabetyp einer Funktion um festzstellen ob es einen Fehler gab. Erweiterte Fehlerinformationen sind dann woanders abrufbar. In C bedeutet ein Rückgabewert von 0 meistens einen Fehler. Erweiterte Informationen sind in der globalen Variablen errno enthalten.
Dies hat allerdings einen großen Nachteil: betrachten wir eine Funktion die eine Zahl durch eine andere dividiert und das Ergebnis zurück gibt.
double divide(int divident, int divisor)
{
if(divisor==0)
{
//was jetzt?
return 0;
}
return static_cast<double>(divident)/divisor;
}Was machen wir wenn der Divisor 0 ist? Die Division muss fehlschlagen - aber welcher Wert ist ungültig? 0 kann auch bei einer ordentlichen Division rauskommen. Eine Möglichkeit wäre das Ergebnis der Division in eine Variabe zu schreiben, die per Referenz übergeben wurde.
bool divide(int divident, int divisor, int& result)
{
if(divisor==0)
{
return false;
}
result=static_cast<double>(divident)/divisor;
return true;
}Der Nachteil dieser Methode ist offensichtlich: die Funktion divide lässt sich nicht mehr so schön verwenden. Auch ist ein cout<<divide(2,3); nicht mehr möglich.