#include <iostream>
using namespace std;
class T1
{
const int t = 100;
public:
T1()
{
cout << "T1 constructor: " << t << endl;
}
};
Lorsque j'essaie d'initialiser la variable membre const t
avec 100. Mais cela me donne l'erreur suivante:
test.cpp:21: error: ISO C++ forbids initialization of member ‘t’
test.cpp:21: error: making ‘t’ static
Comment puis-je initialiser une const
valeur?
Réponses:
La
const
variable spécifie si une variable est modifiable ou non. La valeur constante attribuée sera utilisée chaque fois que la variable est référencée. La valeur attribuée ne peut pas être modifiée pendant l'exécution du programme.L' explication de Bjarne Stroustrup le résume brièvement:
Une
const
variable doit être déclarée dans la classe, mais elle ne peut pas y être définie. Nous devons définir la variable const en dehors de la classe.Ici, l'affectation
t = 100
se produit dans la liste d'initialisation, bien avant l'initialisation de la classe.la source
Here the i = 10 assignment in initializer list happens much before the class initilizaiton occurs.
je ne comprends pas. Et fondamentalement, ce genre de définition d'autorisation dans la classe est spécifique au compilateur, n'est-ce pas?operator = function not found
dans VC ++. Quel peut être le problème?Eh bien, vous pourriez le faire
static
:ou vous pouvez utiliser un initialiseur de membre:
la source
const member
devrait être accessible à partir des fonctions / objets alors pourquoi statique?Il existe plusieurs façons d'initialiser les membres const à l'intérieur de la classe.
Définition du membre const en général, nécessite également l'initialisation de la variable.
1) À l'intérieur de la classe, si vous voulez initialiser le const, la syntaxe est comme ceci
2) La deuxième façon peut être
3) Eh bien, si vous ne voulez pas initialiser à la déclaration, alors l'autre façon est de passer par le constructeur, la variable doit être initialisée dans la liste d'initialisation (pas dans le corps du constructeur). Ça doit être comme ça
la source
Si vous ne souhaitez pas rendre le
const
membre de données dans la classe statique, vous pouvez initialiser leconst
membre de données à l'aide du constructeur de la classe. Par exemple:s'il y a plusieurs
const
membres de données dans la classe, vous pouvez utiliser la syntaxe suivante pour initialiser les membres:la source
Vous pouvez mettre à niveau votre compilateur pour prendre en charge C ++ 11 et votre code fonctionnerait parfaitement.
Utilisez la liste d'initialisation dans le constructeur.
la source
Une autre solution est
Donc t est initialisé à 100 et il ne peut pas être changé et il est privé.
la source
Si un membre est un tableau, ce sera un peu plus complexe que la normale:
ou
la source
Les espaces de noms sont un autre moyen possible:
L'inconvénient est que d'autres classes peuvent également utiliser les constantes si elles incluent le fichier d'en-tête.
la source
C'est la bonne façon de faire. Vous pouvez essayer ce code.
si vous utilisez
C++10 Compiler or below
alors vous ne pouvez pas initialiser le membre contre au moment de la déclaration. Donc ici, il faut faire constructeur pour initialiser le membre de données const. Il est également indispensable d'utiliser la liste d'initialisationT1():t(100)
pour obtenir de la mémoire à l'instant.la source
vous pouvez ajouter
static
pour rendre possible l'initialisation de cette variable membre de classe.Cependant, ce n'est pas toujours une bonne pratique d'utiliser la déclaration de classe interne, car tous les objets instaciés à partir de cette classe partageront la même variable statique qui est stockée dans la mémoire interne en dehors de la mémoire de portée des objets instanciés.
la source