$ 9.3.1/3 Unis-
« Une fonction membre non statique Ces cvqualifiers affectent le type de ce pointeur peut être déclarée const, volatile ou const volatile. (9.3.2). Ils affectent également la type de fonction (8.3.5) de la fonction membre, une fonction membre déclarée const est une fonction membre const, une fonction membre déclarée volatile est une fonction membre volatile et une fonction membre déclarée const volatile est une fonction membre const volatile. "
Voici donc le résumé:
a) Un qualificatif const peut être utilisé que pour la classe non membres statiques fonctions
b) de qualification de cv pour la fonction participent à une surcharge
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 pour la référence normative! –