Wskrzeszenie starego wątku, ale widzę, że nikt nie wspomniał o przeciążaniu przez ref-kwalifikatory. Kwalifikatory ref to funkcja języka dodana w C ++ 11 i dopiero niedawno się na nią natknąłem - nie jest tak rozpowszechniona jak np. Kwalifikatory cv. Główną ideą jest rozróżnienie między dwoma przypadkami: kiedy funkcja składowa jest wywoływana na obiekcie rvalue i kiedy jest wywoływana na obiekcie lvalue. Możesz w zasadzie napisać coś takiego (nieznacznie modyfikuję kod OP):
#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);
}
Ten kod wygeneruje następujące dane wyjściowe:
returning int..
returning char..
Oczywiście, tak jak w przypadku kwalifikatorów cv, obie funkcje mogłyby zwrócić ten sam typ, a przeciążanie nadal by się powiodło.