9
votes

Utilisation ++ à l'intérieur de la taille de mot-clé

Dupliqué possible:
Quel est le mécanisme de taille de () en C / C ++?

Salut,

Je suis un TA pour une université, et récemment, j'ai montré à mes étudiants de premier cycle le code C suivant d'un casse-tête C J'ai trouvé: xxx

J'ai juste une question: pourquoi la sortie est-elle égale à 5, pas 6? Le ++ est-il simplement ignoré? Que se passe t-il ici? Merci!


0 commentaires

5 Réponses :


14
votes

L'expression dans une taille de papier n'est pas évaluée - seul son type est utilisé. Dans ce cas, le type est INT, le résultat de ce que je produirait si elle était évaluée. Ce comportement est nécessaire, car la taille de la taille est en fait une opération de compilation (son résultat peut donc être utilisé pour des éléments tels que les matrices de dimensionnement), pas une heure d'exécution.


2 commentaires

Il n'est pas toujours évalué au moment de la compilation si l'opérande est une VLA.


Considérons Tailleof (int [i ++]) . :-)



1
votes

Oui, Intérieur Tailleof n'est évalué que pour le type.


0 commentaires

1
votes

Pourquoi la sortie est-elle égale à 5, pas 6?

Tailleof n'évalue pas l'expression à l'intérieur, seul le type.

Ce que nous avons gardé à l'esprit est que la taille de la taille n'est pas une fonction mais un opérateur de temps compilé , il est donc impossible d'évaluer son contenu.


0 commentaires

1
votes

La raison principale est que taille de n'est pas une fonction , il s'agit d'un opérateur . Et il est principalement évalué au moment de la compilation, sauf s'il existe une matrice de longueur variable. Étant donné que la taille de int peut être évaluée à la compilation, il renvoie donc 4 .


0 commentaires

3
votes

La taille de l'opérateur est évaluée au moment de la compilation. Tailleof (i ++) se lit essentiellement au compilateur comme taille de (int) (jeter le ++).
Pour démontrer cela, vous pouvez regarder la vision de l'assemblage de votre petit programme: Entrez la description de l'image ici Comme vous pouvez le constater dans la ligne marquée, la taille de l'entier (4) est déjà là et juste chargée dans i. Il n'est pas évalué ni même calculé lorsque le programme est exécuté.


0 commentaires