$ 9.3.1 const/3 Uniti-
"una funzione membro non static può essere dichiarato, volatile o const volatile. Queste cvqualifiers influenzano il tipo di questo puntatore (9.3.2). Hanno inoltre influenzano il tipo di funzione (8.3.5) della funzione membro, una funzione membro dichiarata const è una funzione membro const, una funzione membro dichiarata volatile è una funzione membro volatile e una funzione membro dichiarata const volatile è una funzione membro volatile const. "
ecco il riassunto:
a) Un qualificatore const può essere utilizzato solo per le funzioni di classe non statiche membri
b) qualifica cv per la funzione partecipano sovraccarico
struct X{
int x;
void f() const{
cout << typeid(this).name();
// this->x = 2; // error
}
void f(){
cout << typeid(this).name();
this->x = 2; // ok
}
};
int main(){
X x;
x.f(); // Calls non const version as const qualification is required
// to match parameter to argument for the const version
X const xc;
xc.f(); // Calls const version as this is an exact match (identity
// conversion)
}
+ 1 per il riferimento normativo! –