2017-01-30 3 views
-4

Je veux connaître les types de variables qui sont valides avec un mot clé register pour un accès rapide. Par exemple, puis-je avoirQuels sont les types de variables de registre valides?

register int i; 
register char ch; 
register float f; 

J'aimerais également connaître le nombre de variables de registre que je peux déclarer dans mon programme.

+1

Cela dépend du compilateur et de l'architecture. Il n'y a pas de réponse "général". Certains compilateurs ignorent complètement le mot clé 'register', même si aucune optimisation n'est activée. –

+0

Cette question n'a de sens que dans le contexte d'une implémentation spécifique. \ – SergeyA

+0

Le spécificateur de stockage de registre s'applique à l'origine uniquement aux variables de type type int, char ou pointeur. –

Répondre

5

The register keyword a été dépréciée en C++ 11, et parce que utilisé et réservé en C++ 17.

Vous ne devriez pas l'utiliser et je serais également surpris s'il signifiait vraiment quelque chose de significatif pour les compilateurs modernes.

1

Remarque: register Le mot clé est déconseillé jusqu'à C++ 17, inutilisé et réservé depuis C++ 17.

Pour parler en général

Le spécificateur de stockage de registre applique à l'origine uniquement aux variables de type int, char ou types de pointeur. Cependant, il s'applique à tout type de variable. En pratique, le registre a un effet significatif sur les variables entières et caractères uniquement. Gardez également à l'esprit que le spécificateur de registre est appliqué aux variables locales et aux paramètres formels d'une fonction (les variables de registre globales ne sont pas autorisées).

En fait, vous n'avez pas à vous soucier de déclarer de nombreuses variables de registre. En cas de trop nombreuses variables de registre, le compilateur les transforme automatiquement en variables non-registre (si la limite est atteinte). Au moins deux variables de registre de type int ou char peuvent être réellement conservées dans le registre CPU.

+0

Une raison pour le vote à la baisse ?? –

+1

La première phrase de la réponse ne raconte que la moitié de l'histoire, et pourrait facilement être interprétée (mis?) De telle sorte que 'register' pourrait être utilisé à partir de C++ 17. Je n'ai pas trouvé de mention dans la norme indiquant que le registre a un effet significatif sur les types entiers et caractères uniquement. Quelle est votre source pour cette revendication? (hors sujet: la classification est un peu redondante, puisque les types de caractères sont des entiers). – user2079303

+0

@ user2079303 source est 'La référence complète quatrième édition' par' Herbert Schildt' page 32 sous 'registre Variables' dernier para http://home.iitj.ac.in/~ug201310035/H.Schildt.Cpp.The.Complete .Reference.4th.Edition.ENG.pdf –