8 votes

Que signifie le terme "lexical" en C++ ?

Je lis qu'il existe des constantes lexicales, des opérateurs lexicaux, une portée lexicale, etc. En quoi le terme "lexical" change-t-il la signification d'une constante, par exemple d'une chaîne littérale, d'un opérateur quelconque, ou d'une portée d'un identificateur ?

7voto

Ben Voigt Points 151460

Le terme "lexical" signifie qu'il est lié au code source.

Par exemple, 1 est une constante lexicale. D'AUTRE PART, sizeof(char) est également une expression de constante intégrale à la compilation, mais ce n'est pas une constante lexicale. D'un point de vue lexical, il s'agit d'une invocation de la fonction sizeof de l'opérateur.

Les opérateurs lexicaux travaillent sur le code source. Les opérateurs du préprocesseur entrent dans cette catégorie.

Dans la plupart des cas, il n'y a pas de différence entre l'utilisation de 1 o sizeof(char) n'importe où dans mon programme. Mais, comme l'argument des opérateurs lexicaux # o ## cela fait une différence considérable, car ces derniers travaillent sur le code réel et non sur le résultat de l'évaluation :

#define STR(x) #x

std::string one = STR(1);
std::string also_one = STR(sizeof(char));

Enfin, la portée lexicale désigne la partie du code source du programme où l'identificateur existe (est reconnu, peut être utilisé). Cela contraste avec la portée dynamique, également connue sous le nom de durée de vie de l'objet, qui est la partie du programme où l'objet existe (conserve sa valeur et peut être manipulé indirectement par le biais d'un pointeur ou d'une référence, même si le nom n'est pas dans la portée lexicale).

string f(string x) { return "2" + x; } // main's "y" is not in lexical scope, however it is in dynamic scope, and will not be destroyed yet

int main(void)
{
   string y = "5.2"; // y enters lexical scope and dynamic scope

   string z = f("y"); // y leaves lexical scope as f is called, and comes back into lexical scope when f returns

   return z.size();
   // z leaves lexical and dynamic scope, destructor is called
}

0voto

marinara Points 419

Le fait d'utiliser le terme "constante lexicale" ne signifie pas qu'il s'agit d'un autre type de constante.

En général, lorsque vous parlez de grammaire C++, vous utilisez le terme lexical ceci, lexical cela. Par opposition aux constantes stockées dans des objets, à la portée d'un fichier ou à un opérateur sur une matrice.

Donc, si je parle d'une ligne de code, qui a une constante comme : (32786) Je peux utiliser le mot lexical (peut-être inutilement) pour confirmer que le nombre n'existe que sous la forme d'un jeton C++.

Ainsi, lorsque je parle de Jetons C++ et leurs relations, j'utilise le mot lexical comme wikipedia le fait .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X