Wiederbelebung eines alten Threads, aber ich kann sehen, dass niemand die Überladung durch Ref-Qualifier erwähnte. Ref-Qualifizierer sind eine Sprachfunktion, die in C ++ 11 hinzugefügt wurde, und ich bin erst kürzlich darauf gestoßen - sie ist nicht so weit verbreitet wie z. B. Lebenslaufqualifizierer. Die Hauptidee besteht darin, zwischen den beiden Fällen zu unterscheiden: Wenn die Elementfunktion für ein rvalue-Objekt aufgerufen wird und wenn sie für ein lvalue-Objekt aufgerufen wird. Sie können im Grunde so etwas schreiben (ich ändere den OP-Code leicht):
#include <stdio.h>
class My {
public:
int get(int) & {
printf("returning int..\n");
return 42;
}
char get(int) && {
printf("returning char..\n");
return 'x';
};
};
int main() {
My oh_my;
oh_my.get(13);
My().get(13);
}
Dieser Code erzeugt die folgende Ausgabe:
returning int..
returning char..
Natürlich könnten, wie es bei Lebenslaufqualifizierern der Fall ist, beide Funktionen den gleichen Typ zurückgegeben haben, und eine Überladung wäre immer noch erfolgreich.