8
votes

Puis-je déclarer la variable membre en tant que const en classe de C ++? Si oui, comment?

Puis-je déclarer la variable membre en tant que const en classe de C ++? Si oui, comment?


0 commentaires

3 Réponses :


18
votes

Vous pouvez - vous mettez Const devant le nom de type.

class C
{
     const int x;

public:
      C() : x (5) { }
};


0 commentaires

3
votes

Bien sûr, le moyen le plus simple est comme celui-ci si la valeur sera la même dans toutes les instances de votre classe: xxx

ou si vous ne le voulez pas statique: xxx


4 commentaires

Cela devrait vous donner une erreur différente, comme vous avez donné déclaré que je, sans le définir. Vous aurez besoin d'un "int x :: i;" quelque part.


@James - pas non plus, si le compilateur est à jour suffisamment pour prendre en charge les membres de la Const Statique en ligne qui sont initialisés où ils sont déclarés.


@James: Je ne crois pas que c'est vrai pour Static const int Int - vous n'avez pas besoin d'une définition distincte car le compilateur le traite comme une véritable constante.


Cela vous donnera une erreur si vous l'utilisez pour des choses simples, autres. Ce qui suit rend cela donne une erreur de liaison, très probablement: int const & i = x :: i; et & x :: i de même. La transmettre à une fonction prise int & fera le même mal. Strictement, même faire si (x :: i == 1); nécessite une définition, car ici x :: i apparaît si seulement les expressions constantes sont autorisées (c'est cependant Un défaut de la norme - corrigé déjà pour C ++ 1x!). Habituellement, il n'y aura aucune erreur si vous ne lisez immédiatement immédiatement sa valeur.



8
votes

Vous le déclarez comme vous le feriez si ce n'était pas un membre. Notez que déclarer une variable en tant que const aura des effets considérables sur la manière dont la classe est utilisée. Vous aurez certainement besoin d'un constructeur pour l'initialiser:

class A {
    public:
        A( int x ) : cvar( x ) {}
    private:
        const int cvar;
};


0 commentaires