Différence entre Const Int et Int Const en C++
-
Différence entre
const int
etint const
en C++ -
Mot-clé
const
C++ -
const int
etint const
avec variables -
const int
etint const
avec des pointeurs -
Utiliser
int * const
en C++ -
Utiliser
const int *
en C++ - Conclusion
Les questions les plus appréciées et les plus délicates de tout langage de programmation sont celles où de petits changements font une grande différence dans la façon dont le programme fonctionnera et la sortie qu’il donnera.
Dans cet article, nous verrons si const int
est identique à int const
en C++ ou non.
Différence entre const int
et int const
en C++
Code:
int const a = 1000;
const int a = 1000;
Voici deux lignes de code qui se ressemblent presque. Maintenant, ces deux lignes de code sont-elles identiques ?
Avant de répondre à cette question, revenons sur les bases du mot-clé const
de C++.
Mot-clé const
C++
Le mot-clé const
de C++ permet de garder certaines choses constantes. Cela signifie que si vous mettez le mot-clé const
avant toute variable, pointeur ou méthode, la valeur des éléments de données de ces variables, pointeurs et méthodes ne peut pas être modifiée pendant l’exécution du programme.
Supposons que nous essayons de changer la valeur de n’importe quelle variable, pointeur ou méthode qui est initialisée avec un mot-clé const
, ce qui nous donne une erreur.
Code:
#include <iostream>
using namespace std;
int main() {
const int demo = 1; // constant variable
cout << demo;
demo = 2 // changing the value of constant variable
cout
<< demo;
return 0;
}
Production:
In function 'int main()': error: assignment of read-only variable 'demo'
9 | demo = 2
| ~~~~~^~~
Dans l’exemple ci-dessus, nous déclarons une variable const
demo
et lui attribuons la valeur 1
. Ensuite, nous attribuons une valeur différente, 2
, à la même variable constante.
Cela entraîne une erreur, comme vous pouvez le voir dans la sortie.
Code:
#include <iostream>
using namespace std;
int main() {
int demo = 1;
cout << "The initial value is: " << demo << endl;
// changing the value of the variable
demo = 2;
cout << "The changed value is: " << demo << endl;
return 0;
}
Production:
The initial value is: 1
The changed value is: 2
Cette fois-ci, nous n’initialisons pas la variable demo
avec le mot-clé const
. Par conséquent, nous pouvons modifier la valeur de cette variable sans aucune erreur.
C’est essentiellement ainsi que fonctionne le mot-clé const
. Reportez-vous à ce lien pour en savoir plus sur le mot-clé const
.
Revenons à la question à laquelle nous devions répondre.
const int
et int const
avec variables
La manière standard d’attacher const
à une variable en C++ est de placer ce mot-clé avant le type de données de la variable. Cependant, si nous le plaçons avant la variable elle-même, il sert le même objectif et fonctionne de manière similaire.
Cela signifie que les lignes de code suivantes sont équivalentes et correctes.
const int demo = 1000;
int const demo = 1000;
Lorsque vous lisez de telles déclarations, l’astuce consiste à aller de droite à gauche. Par conséquent, la première ligne de code serait lue comme - demo est un entier constant.
Alors que la deuxième ligne est lue comme - demo est un entier constant. Sans aucun doute, pour dire que ces deux déclarations signifient la même chose.
Nous pouvons le vérifier à travers un exemple concret. Dans cet exemple suivant, nous plaçons le mot-clé const
avant le type de données, c’est-à-dire int
, puis imprimons la variable demo
.
Code:
#include <iostream>
using namespace std;
int main() {
const int demo = 1000; // const keyword before the data type
cout << demo;
}
Production:
1000
Essayons la même chose avec le mot-clé const
placé avant la variable demo
elle-même.
#include <iostream>
using namespace std;
int main() {
int const demo = 1000; // const keyword before the variable itself
cout << demo;
}
Production:
1000
Voyez comment ces instructions fonctionnent de la même manière sans entraîner aucune sorte d’erreur. Nous pouvons utiliser l’une ou l’autre de ces instructions lorsque nous devons déclarer une variable constante.
Ainsi, nous pouvons conclure que int const
est identique à const int
, mais il y a un hic. Cela est vrai pour les variables jusqu’à ce que les pointeurs n’entrent pas.
Pour les pointeurs, la signification du mot clé const
change selon sa position. Voyons comment le mot-clé const
fonctionne avec les pointeurs.
const int
et int const
avec des pointeurs
Utiliser le mot clé const
avec des pointeurs est très simple. Soit nous pouvons rendre le pointeur immuable, soit le contenu pointant vers immuable.
Regardez la ligne de code ci-dessous. Le pointeur demo
est un pointeur constant dont la valeur ne peut pas être modifiée.
Cela signifie qu’il ne peut pas être modifié pour pointer vers une autre valeur ou variable. Nous lisons ceci de droite à gauche car - demo est un pointeur constant vers un entier.
int* const demo = &anyvalue;
Cependant, dans ce deuxième morceau de code donné ci-dessous, les données vers lesquelles pointe le pointeur demo
ne peuvent pas être modifiées. Nous lisons ceci comme - demo est un pointeur vers un entier qui est constant.
const int *demo = &anyvalue;
Comprenons ces deux lignes de code avec des exemples.
Utiliser int * const
en C++
Comme mentionné ci-dessus, placer le mot-clé const
avant la variable de pointeur signifie que nous ne pouvons pas changer le pointeur pour pointer vers une valeur ou une variable différente. Cela peut être vu plus profondément à travers un exemple.
Les points suivants résument ce qui se passe dans le code ci-dessous.
- Ici, nous attribuons d’abord la valeur de la variable
one
à la variable pointeur*demo
. Cela signifie que le pointeur*demo
pointe sur la variableone
. - En imprimant la valeur de la variable
one
, nous obtenons la sortie comme1
, tandis qu’en imprimantdémo
, nous obtenons l’adresse vers laquelle elle pointe. C’est l’adresse de la variableone
. - Plus tard, nous attribuons une autre variable,
two
, à la même variable de pointeur,demo
et imprimons les valeurs. Cette fois, le pointeur renvoie une adresse différente.
Code:
#include <iostream>
using namespace std;
int main() {
int one = 1;
int two = 2;
int *demo = &one; // demo pointer points to variable one
cout << one << endl;
cout << demo << endl;
demo = &two; // assigning the variable two to demo variable
cout << two << endl;
cout << demo << endl;
return 0;
}
Production:
1
0x7ffc22e802a8
2
0x7ffc22e802ac
Vous pouvez voir comment nous pouvons affecter différentes variables à la même variable de pointeur. Ce changement est impossible si vous attachez le mot-clé const
avant la variable de pointeur.
Code:
#include <iostream>
using namespace std;
int main() {
int one = 1;
int two = 2;
int* const demo = &one; // attach const keyword before the pointer variable
cout << one << endl;
cout << demo << endl;
demo = &two; // this assignment will now give an error
cout << two << endl;
cout << demo << endl;
return 0;
}
Production:
In function 'int main()': error: assignment of read-only variable 'demo'
13 | demo = &two;
| ~~~~~^~~~~~
Notez que cette fois, puisque le pointeur déclaré est constant, nous ne pouvons pas lui affecter une autre variable. Ainsi, nous obtenons une erreur.
C’est ce que signifie int const
lorsqu’il est utilisé avec un pointeur.
Utiliser const int *
en C++
Nous savons déjà que nous pouvons utiliser un pointeur pour modifier la valeur d’une variable. Ceci est illustré dans l’exemple ci-dessous.
Les points suivants résument ce qui se passe dans ce code.
- Nous attribuons d’abord la valeur
1
à la variableone
, et le pointeur*demo
pointe sur la variableone
. - Ensuite, on imprime les valeurs de la variable
one
et du pointeur*demo
. Les deux donnent la sortie comme1
. - Plus tard, nous attribuons la valeur
2
à la variable de pointeur,*demo
. - Enfin, nous imprimons les valeurs de la variable
one
et du pointeurdemo
, mais cette fois, ils donnent tous les deux la sortie2
.
Code:
#include <iostream>
using namespace std;
int main() {
int one = 1; // variable one holds the value 1
int *demo = &one;
cout << one << endl;
cout << *demo << endl;
*demo = 2; // assign the value 2 to variable demo
cout << one << endl;
cout << *demo << endl;
}
Production:
1 1 2 2
Voyez comment la valeur de la variable change à l’aide du pointeur auquel la variable a été affectée. Maintenant, si vous utilisez le mot-clé const
avant le type de données du pointeur, ce type de mutabilité ne sera pas possible.
Code:
#include <iostream>
using namespace std;
int main() {
int one = 1;
const int *demo = &one; // attach const keyword before data type
cout << one << endl;
cout << *demo << endl;
*demo = 2; // this assignment will give an error now
cout << one << endl;
cout << *demo << endl;
}
Production:
In function 'int main()': error: assignment of read-only location '* demo'
12 | *demo = 2;
| ~~~~~~^~~
Notez que nous obtenons une erreur si nous essayons de changer la valeur de la variable vers laquelle pointe le pointeur. C’est ce que signifie const int
lorsqu’il est utilisé avec un pointeur.
Conclusion
Dans cet article, nous avons appris en quoi const int
et int const
sont différents l’un de l’autre. De plus, nous avons vu comment ils fonctionnent dans le contexte des variables et des pointeurs.
Nous avons également appris que ces deux formats signifient la même chose pour les variables simples, mais que la signification des pointeurs change de manière significative. Nous l’avons compris à travers divers exemples de travail et avons également passé en revue les bases du mot-clé const
de C++.