140 votes

Comment puis-je écrire un court littérale en C++?

Question très simple.. comment puis-je écrire un short littérale en C++?

Je sais que les suivantes:

  • 2 est int
  • 2L est long
  • 2LL est long long
  • 2.0f est float
  • 2.0 est double
  • '\2' est char.

Mais comment pourrais-je écrire un short littérale? J'ai essayé d' 2S mais qui donne un avertissement du compilateur.

54voto

Ken Smith Points 192

C++11 vous donne assez proches de ce que vous voulez.

#include <cstdint>

inline std::uint16_t operator "" _u(unsigned long long value)
{
    return static_cast<std::uint16_t>(value);
}

void func(std::uint32_t value); // 1
void func(std::uint16_t value); // 2

func(0x1234U); // calls 1
func(0x1234_u); // calls 2

// also
inline std::int16_t operator "" _s(unsigned long long value)
{
    return static_cast<std::int16_t>(value);
}

34voto

Michael Burr Points 181287

Même les auteurs de la norme C99 suis fait piéger par la présente. Ceci est un extrait de Danny Smith domaine public stdint.h mise en œuvre:

/* 7.18.4.1  Macros for minimum-width integer constants

    Accoding to Douglas Gwyn <gwyn@arl.mil>:
    "This spec was changed in ISO/IEC 9899:1999 TC1; in ISO/IEC
    9899:1999 as initially published, the expansion was required
    to be an integer constant of precisely matching type, which
    is impossible to accomplish for the shorter types on most
    platforms, because C99 provides no standard way to designate
    an integer constant with width less than that of type int.
    TC1 changed this to require just an integer constant
    *expression* with *promoted* type."
*/

8voto

unwind Points 181987

Autant que je sache, vous ne le faites pas, il n'y a pas de suffixe. La plupart des compilateurs avertira si un entier littéral est trop grand pour tenir dans quelque variable que vous essayez de le stocker dans.

0voto

jsl4980 Points 451

J'ai fait quelques recherche sur google et trouvé une bonne référence ici

À partir de ce site un unsigned short peut être fait par L'ab' d'Un ou deux caractères entre guillemets simples ('), précédé par la lettre L

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