Selon la Norme C++ (9.2.3.2 données membres Statiques)
1 Une donnée membre statique est pas une partie de la sous-objets de classe...
Et (9.2.2.1 Le pointeur this)
1 Dans le corps d'un non-statique (9.2.1) de la fonction membre, le mot-clé
c'est un prvalue expression dont la valeur est l'adresse de l'objet
pour laquelle la fonction est appelée. Le type de ce membre
la fonction d'une classe de X est X*. Si la fonction de membre est déclaré
const, le type de ce qui est const X*,...
Et enfin (9.2.2 Non-fonctions membres statiques)
3 ... si la recherche du nom de (3.4) résout le nom de l'id de l'expression d'un
non-statique non-membre de type de classe C, et si le
id-l'expression est potentiellement évalué ou C est X ou une classe de base de X,
l'id d'expression est transformé en un membre de la classe d'accès expression
(5.2.5) à l'aide de (*this) (9.2.2.1) comme le suffixe-expression de la
à gauche de l' . de l'opérateur.
Ainsi, dans cette définition de la classe
class A
{
public:
static int a;
void set() const
{
a = 10;
}
};
la donnée membre statique a
n'est pas un sous-objet d'un objet de la classe type et le pointeur this
n'est pas utilisé pour accéder à la donnée membre statique. De sorte que toute fonction membre non statique constante ou non une constante ou une fonction membre statique pouvez modifier le membre de données car il n'est pas une constante.
Dans cette définition de classe
class A
{
public:
int a;
void set() const
{
a = 10;
}
};
la non-membre de données statiques a
est un sous-objet d'un objet de la classe type. Pour accéder à une fonction de membre il est utilisé soit un membre de la syntaxe d'accès de cette syntaxe est implicite. Vous ne pouvez pas utiliser un pointeur constant this
de modifier le membre de données. Et le pointeur c'est en effet de type const A *
dans la fonction set
parce que la fonction est déclarée avec le qualificatif const
. Si la fonction n'est pas de la qualifier dans ce cas, le membre de données peut être modifié.