Comment initialiser const membre de la variable dans une classe?
#include <iostream>
using namespace std;
class T1
{
const int t = 100;
public:
T1()
{
cout << "T1 constructor: " << t << endl;
}
};
Lorsque j'essaie d'initialiser la const variable membre t
avec 100. Mais il 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 un const
valeur?
- avec c++11, c'est possible de vérifier ce lien stackoverflow.com/questions/13662441/...
Vous devez vous connecter pour publier un commentaire.
La
const
variable indique si une variable est modifiable ou non. La valeur de la constante attribué sera utilisé chaque fois que la variable est référencée. La valeur attribuée ne peut pas être modifié pendant l'exécution du programme.Bjarne Stroustrup est explication résume brièvement:
Un
const
variable doit être déclarée dans la classe, mais il ne peut pas être défini. Il nous faut définir la variable const en dehors de la classe.Ici l'affectation
t = 100
qui se passe dans la liste des initialiseurs, bien avant la classe initilization se produit.Here the i = 10 assignment in initializer list happens much before the class initilizaiton occurs.
je force l'obtenir. Et, fondamentalement, ce genre de permettre à des définitions dans la classe, le compilateur droit spécifique ?operator = function not found
dans VC++. Quel peut être le problème?static const int
sont autorisés à être initialisé à l'intérieur de déclaration de classe.Eh bien, vous pourriez faire
static
:ou vous pouvez utiliser un initialiseur de membre:
const member
doit être accessible de l'fonctions/objets alors pourquoi statique?const
, quelle différence cela fait-il?Il y a plusieurs façons d'initialiser la const membres à l'intérieur de la classe..
Définition de const membre en général, les besoins de l'initialisation de la variable de trop..
1) à l'Intérieur de la classe , si vous souhaitez initialiser la const de la syntaxe, c'est comme cela
2) Deuxième voie peut être
3) eh Bien, si vous ne voulez pas initialiser lors de la déclaration, puis l'autre façon est à travers constructeur, la variable doit être initialisée dans la liste d'initialisation(pas dans le corps du constructeur). Il doit être comme ceci
Vous pouvez mettre à niveau votre compilateur de C++11 et votre code fonctionne parfaitement.
Utiliser la liste d'initialisation dans le constructeur.
Si vous ne voulez pas faire la
const
données membres de la classe statique, Vous pouvez initialiser laconst
membre de données en utilisant le constructeur de la classe.Par exemple:
s'il y a plusieurs
const
données membres de la classe, vous pouvez utiliser la syntaxe suivante pour initialiser les membres:Une autre solution est
Donc t est initialisé à 100 et il ne peut être changé et il est privé.
Si un membre est un Tableau, il sera un peu complexe que la normale est:
ou
Une autre façon possible sont des espaces de noms:
L'inconvénient est que les autres classes peuvent également utiliser les constantes s'ils incluent le fichier d'en-tête.
vous pouvez ajouter
static
afin de rendre possible l'initialisation de cette variable de membre de classe.Cependant, ce n'est pas toujours une bonne pratique à utiliser à l'intérieur de la déclaration de classe, parce que tous les objets instacied à partir de cette classe d'actions de la même variable statique qui est stocké dans la mémoire interne de l'extérieur de la portée de la mémoire des objets instanciés.
C'est la bonne façon de le faire. Vous pouvez tester ce code.
si vous utilisez
C++10 Compiler or below
alors vous ne pouvez pas initialiser les inconvénients de membre au moment de la déclaration. Donc, ici, il se doit de faire de constructeur pour initialiser le const membre de données. Il est également doit utiliser initialiser la listeT1():t(100)
d'obtenir la mémoire à l'instant.