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.
Type de données | Préfixe | Suffixe | Résultante type |
---|---|---|---|
int | U ou u | unsigned int | |
int | L ou L | long | |
int | UL, Ul, UL, UL, LU, Lu, Lu, ou lu | unsigned long | |
int | LL ou LL | long long | |
int | ULL, Ull, Ull, ULL, dégroupage, dégroupage, dégroupage, ou llu | unsigned long long | |
double | F ou f | flotteur | |
double | L ou L | long double | |
carboniser | L | wchar_t | |
carboniser | U | char32_t | |
carboniser | u | char16_t | |
Chaîne | L | const wchar_t * | |
Chaîne | U | char32_t const * | |
Chaîne | u | char16_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