Création c ++ littéraux avec préfixes et suffixes

Gain de temps et d'effort est une partie de la raison pour laquelle vous utilisez littéraux. Il est un raccourci pour créer littéraux et vous assurer que vous obtenez le type constante correcte. Beaucoup de littéraux standards vous fournir un préfixe ou un suffixe vous pouvez utiliser pour y accéder. Précisément comment le préfixe ou un suffixe est interprétée dépend de comment vous l'utilisez.

Par exemple, un suffixe de U pourrait signifier une unsigned int lorsqu'il est utilisé avec un int la valeur, tandis que le préfixe U pourrait signifier une char32_t const pointeur lorsqu'il est utilisé avec une chaîne de caractères. Le tableau montre une liste des préfixes et des suffixes que la plupart des compilateurs soutiennent.

Préfixes et suffixes standard
Type de donnéesPréfixeSuffixeRésultante type
intU ou uunsigned int
intL ou Llong
intUL, Ul, UL, UL, LU, Lu, Lu, ou luunsigned long
intLL ou LLlong long
intULL, Ull, Ull, ULL, dégroupage, dégroupage, dégroupage, ou lluunsigned long long
doubleF ou fflotteur
doubleL ou Llong double
carboniserLwchar_t
carboniserUchar32_t
carboniseruchar16_t
ChaîneLconst wchar_t *
ChaîneUchar32_t const *
Chaîneuchar16_t const *

En utilisant les préfixes et suffixes peut vous faire économiser un temps considérable. La PrefixesAndSuffixes par exemple ici montre comment vous souhaitez les utiliser pour créer des variables de différentes sortes.

#comprendre #include using namespace std-using namespace abi-char * demangle (const char * Object) {int Etat-char * RealName-RealName = __cxa_demangle (Object, 0, 0, Statut) -Retour RealName-} int main () {auto Int1 = 23-auto Int2 = 23L-auto Int3 = 23U-auto INT4 = 23u-auto String1 = "Bonjour" -auto String2 = L "Bonjour" -auto String3 = U "Bonjour" -auto string4 u = "Bonjour" -cout lt; lt; Int1 lt; lt; endl lt; lt; Demangle (typeid (Int1) .name ()) lt; lt; endl-cout lt; lt; Int2 lt; lt; endl lt; lt; Demangle (typeid (Int2) .name ()) lt; lt; endl-cout lt; lt; Int3 lt; lt; endl lt; lt; Demangle (typeid (Int3) .name ()) lt; lt; endl-cout lt; lt; INT4 lt; lt; endl lt; lt; Demangle (typeid (int4) .name ()) lt; lt; endl-cout lt; lt; Chaîne1 lt; lt; endl lt; lt; Demangle (typeid (Chaîne1) .name ()) lt; lt; endl-cout lt; lt; String2 lt; lt; endl lt; lt; Demangle (typeid (String2) .name ()) lt; lt; endl-cout lt; lt; String3 lt; lt; endl lt; lt; Demangle (typeid (String3) .name ()) lt; lt; endl-cout lt; lt; String4 lt; lt; endl lt; lt; Demangle (typeid (string4) .name ()) lt; lt; endl-retour 0-}

La Demangle () fonction est spécifique GCC. La plupart des compilateurs C ++ essoreuse à rouleaux (modifier l'orthographe de) mots-clés et des informations de type à faire une application plus difficile pour quelqu'un de inverser-assembler (convertir en langage machine arrière dans le code source de C).

Afin de déterminer les informations de type, vous utilisez le typeid () fonction pour créer un typeinfo structure. La Nom () fonction retourne le nom du type trouvé dans cette structure pour l'afficher à l'écran. Cependant, ce nom est mutilé, vous devez donc utiliser la Demangle () fonction pour changer le ramener à sa forme lisible originale.

La plupart des exemples de ce chapitre reposent sur la auto mot-clé pour détecter automatiquement le type de variable créé par un UDL. Ce mot clé est une caractéristique importante pour les nouvelles applications C ++ qui font usage des nouvelles extensions que le langage fournit.

Dans ce cas, le code utilise le mot-clé automatique pour détecter la sortie du préfixe ou un suffixe littéral sorte que la variable est automatiquement le type correct pour une situation. Lorsque vous exécutez cette application, vous voyez la sortie suivante:

23int23long23unsigned int23unsigned intHellochar const * const 0x46e02cwchar_t * 0x46e038char32_t const * const 0x46e02cchar16_t *

Même si les données est le même dans tous les cas, les variables utilisées pour contenir les données diffèrent à cause de la préfixe ou suffixe utilisé pour créer la variable. Notez que le même préfixe ou un suffixe a des effets différents selon le type de la variable à laquelle il est appliqué. En outre, parfois le cas des questions de préfixe ou un suffixe (comme dans le travail avec une chaîne).

Certains compilateurs, comme GCC, notamment les extensions non-standard pour les données numériques que vous devez utiliser avec précaution. Étant donné la popularité de GCC et de la nécessité pour ces formats de nombre, vous pouvez constater que vous devez absolument ne devez les utiliser à la fois. Voici quelques extensions de suffixe commun fournis par les implémentations du CCG:

  • ré: double

  • DF: _Decimal32


  • dd: _Decimal64

  • dl: _Decimal 128

  • w: __float80

  • q: __float128

  • je: complexe double

  • fi: complexe de float


» » » » Création c ++ littéraux avec préfixes et suffixes