Referenzen und Konstanten: Konstanten-Elementfunktionen

Um die erste Verwirrung ob der unterschiedlichen Verwendung des Schlüsselwortes const noch ein wenig zu erhöhen, sei auf die weitere Möglichkeit verwiesen, sogenannte Konstanten-Element-Funktionen (constant member functions) zu deklarieren:

Ziel ist es hierbei, auch für den ersten Operanden eine Konstante zuzulassen. Natürlich macht es für einige Operatoren, wie etwa dem Operator +=, wenig Sinn, konstante Objekte zuzulassen, da ja das erste Argument (das Objekt, für das die Elementfunktion aufgerufen wurde) auf jeden Fall verändert werden soll. Warum aber sollte etwa c + c mit konstantem Objekt c nicht zulässig sein?
Eine Konstanten-Element-Funktion wird durch den zusätzlichen Parameter const zwischen Parameterliste und Funktionskörper deklariert:

  complex complex::operator + (const complex c) const
  {
      complex h;    // Hilfsvariable;

      h.re = re + c.re;
      h.im = im + c.im;

      return h;
  };

Man beachte bei diesem Beispiel folgendes: Es darf nun keine Referenz mehr zurückgeliefert werden, da es sich bei dem Rückgabewert um ein lokales Objekt handelt! Würde man eine Referenz zurückliefern, so liefert man einen zweiten Namen für ein Objekt zurück, daß nach Beendigung der Funktion gar nicht mehr exisitiert!
Durch die Angabe des Schlüsselwortes const wird es möglich, Operatoren für konstante und variable Objekte unabhängig voneinander zu implementieren, da es sich zwar um den gleichen Operator, aber um verschiedene Funktionen handelt. Im folgenden Abschnitt wird hierauf näher eingegangen.