quelles sont les différences entre b et c?
c a un initialiseur de constante de temps de compilation, contrairement à b. Un objet const avec initialiseur de constante de temps de compilation est lui-même une valeur de constante de temps de compilation.
Puisque je peux définir une lenth d'un arry en utilisant une constante, alors pourquoi cela ne fonctionne-t-il pas?
Pas n'importe quelle constante fera l'affaire. const
Le qualificatif implique une constance d'exécution (c'est-à-dire que la valeur peut être déterminée lors de l'exécution mais ne changera pas pendant la durée de vie de l'objet). Seules les valeurs de constante de temps de compilation peuvent être utilisées comme taille de tableau.
Le terme «constant» est vraiment ambigu et le mot
const
- clé est trompeur.const
signifie: "ne pas autoriser la valeur de cet objet ne sera pas modifiée après l'initialisation". Cela ne signifie pas "constante de temps de compilation". Sa valeur initiale peut (et le fait généralement) provenir toujours de sources d'exécution.Vous avez besoin d'une constante au moment de la compilation pour un tableau lié.
Il est parfois possible d'avoir un objet nommé
foo
qui est constant au moment de la compilation, s'il l'estconst
et qu'il a été initialisé à partir d'une expression constante, comme un littéral ou uneconstexpr
chose. C'est le cas pourc
; ce n'est pas le cas pourb
.la source