Wir wissen, dass in diesem Code ...
Beta_ab const& getAB() const { return ab; }
^^^^^
Die markierten const
bedeutet, dass die Member-Funktion auf ein const
Objekt aufgerufen werden kann. Eine Memberfunktion kann immer auf ein Objekt ungleich const
unabhängig von der cv-Qualifikation der Funktion aufgerufen werden.
Also in diesem Code ...
Beta_ab const& getAB() const & { return ab; }
^
Wir sollten erwarten, dass die markierten &
sagt auch etwas darüber, welche Arten von Objekten dieser Elementfunktion erlaubt ist aufgerufen werden. Wir wären richtig; In C++ 11 heißt das, dass die Memberfunktion nur bei lvalues aufgerufen werden kann.
Beta_ab const& getAB() const& { return ab; }
Beta_ab && getAB() && { return ab; }
In dem obigen Beispiel wird die erste Überlast an lvalues aufgerufen, und die zweite Überlast wird auf nicht const
rvalues aufgerufen. Ähnlich wie bei dem folgende vertrauten Beispiel mit Qualifier gewöhnlichen Funktionsparametern angewandt:
void setAB(AB const& _ab) { ab = _ab; }
void setAB(AB && _ab) { ab = std::move(_ab); }
Es wenn auch etwas anders für die normalen Parameter arbeitet, wie in diesem Beispiel, die erste Überlast würde eine rvalue akzeptieren, wenn die zweite Überlast entfernt wurden .
Verwandte/duplizieren: http://Stackoverflow.com/q/21861148/420683 – dyp