Dupliqué possible: strong>
Quel est le mécanisme de taille de () en C / C ++? p>Salut, P>
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é: p>
xxx Pré> 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! P> blockQuote>
5 Réponses :
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. P>
Il n'est pas toujours évalué au moment de la compilation si l'opérande est une VLA.
Considérons Tailleof (int [i ++]) code>. :-)
Oui, Intérieur Tailleof CODE> n'est évalué que pour le type. P>
Pourquoi la sortie est-elle égale à 5, pas 6? p> blockQuote>
Tailleof n'évalue pas l'expression à l'intérieur, seul le type. P>
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é strong>, il est donc impossible d'évaluer son contenu. P>
La raison principale est que taille de code> n'est pas une fonction
code>, il s'agit d'un opérateur
code>. 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 code> peut être évaluée à la compilation, il renvoie donc
4 code>. P>
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:
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é. P>