Question

Mes sons question comme une contradiction, mais je ne sais pas comment se référer à la nouvelle syntaxe littérale autre que user-defined-literal.

std::string operator "" s ( const char* str, size_t len )
{
   return std::string( str, len );
}

assert( "foo"s == "bar"s );

Je me souviens avoir entendu que les littéraux définis par l'utilisateur doit commencer par un préfixe _. Cela impliquerait que la bibliothèque définit des littéraux non-préfixée pour nous.

La norme fournit des UDLs dans la la bibliothèque standard
Si oui, quels sont-ils?

Était-ce utile?

La solution

La langue utilisent déjà régulièrement suffixes littéraux, par exemple 1U.

Il deviendrait ambigu si vous deviez utiliser U comme défini par l'utilisateur littérale, donc la recommandation.

-suffixe entier : u, U, l, L, ll, LL

suffixe flottant : f, F, l, L

Autres conseils

La bibliothèque standard en fait définit pas utilisateur littéraux définis. Nous aurions peut-être pu attendre des nombres complexes, mais pas.

D'autre part, il y a aussi une proposition de les supprimer à nouveau

http: //www.open- std.org/jtc1/sc22/wg21/docs/papers/2011/n3250.html

donc nous ne savons pas encore ce qui se passe.

Contrairement à @ la réponse de Matthieu, le RIMA dit le texte suivant sous 2.14.8 [lex.ext] p1:

Si un jeton à la fois les matchs littéral définies par l'utilisateur et un autre type littéral, il est traité comme celui-ci.
[ Exemple: 123_km est un littéral-défini par l'utilisateur , mais 12LL est un entier littéral . - exemple de fin ]

Donc, même si vous définissez les littéraux, les prédéfinies sont prises et il n'y a pas d'ambiguïté.

Aucun composant bibliothèque standard ont jalonné une revendication sur un littéral défini par l'utilisateur. @Bo mentionné complexe comme une possibilité.

Une autre est bitset:

template<char... Bits>
  inline constexpr std::bitset<sizeof...(Bits)>
  operator"" bits()
  {
    return std::bitset<sizeof...(Bits)>((char []){Bits..., '\0'});
  }

Je prédis qu'il y aura des propositions pour les opérateurs littérales pour divers composants de la bibliothèque dans les améliorations à venir de TR2 bibliothèque.

J'anticipe des collisions sur l'espace de noms de suffixe. Vous pouvez déclarer les opérateurs littérales dans un espace de noms et d'éviter que plusieurs définitions ambiguës, mais vous ne pouvez pas distinguer les suffixes réels par espace de noms dans un littéral réel. Nous verrons.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top