Ceci n'est pas une modification (ou affectation) mais initialisation. par exemple.
struct Bar {
const int b = 5; // initialisation (via initialisateur de membre par défaut)
Bar(int c)
:b(c) // initialisation (via liste d'initialisation de membre)
{
b = c; // affectation; ce qui n'est pas autorisé
}
};
Le membre de donnée const
ne peut pas être modifié ou affecté mais il peut (et doit) être initialisé via la liste d'initialisation des membres ou l'initialisateur de membre par défaut.
Si à la fois l'initialisateur de membre par défaut et l'initialisateur de membre sont fournis pour le même membre de donnée, l'initialisateur de membre par défaut sera ignoré. C'est pourquoi b->b
est initialisé avec la valeur 2
.
Si un membre a un initialisateur de membre par défaut et apparaît également dans la liste d'initialisation des membres dans un constructeur, l'initialisateur de membre par défaut est ignoré.
En revanche, l'initialisateur de membre par défaut prend effet uniquement lorsque le membre de donnée n'est pas spécifié dans la liste d'initialisation des membres. par exemple.
struct Bar {
const int b = 5; // initialisation de membre par défaut
Bar(int c):b(c) {} // b est initialisé avec c
Bar() {} // b est initialisé avec 5
};
0 votes
...comment pourriez-vous attribuer une valeur à une membre
const
...? De plus, en ce qui concerne les autres commentaires, tellement hors sujet que ça fait mal.