char
est un type fondamental. wchar_t
évolué comme d'abord une solution de bibliothèque (en C), puis est devenu un type construit avec un type sous-jacent, correspondant au type qui a été utilisé précédemment pour typedef
il:
C++ 11 $ 3.9.1/5
” Type wchar_t
shall have the same size, signedness, and alignment requirements (3.11) as one of the other integral types, called its underlying type.
Cela explique pourquoi vous ne pouvez pas changer le signedness de wchar_t
, mais il n'explique pas pourquoi il y a un type char
avec signedness non précisée.
En outre, le choix de la signature char
que la plupart des compilateurs défaut, est peu pratique pour plusieurs raisons. Une des raisons est que les valeurs négatives sont ennuyantes et doivent généralement être converties en non signées afin de les comparer. Une autre raison est que les fonctions de classification des caractères C nécessitent des valeurs non négatives (sauf si elles sont passées EOF
). Une troisième raison est que sur les vieilles machines de magnitude et de signe ou de complément, il y a une valeur inutilisable.
Il peut y avoir une explication de cela dans “ de Stroustrup La conception et l'évolution de C++ ”, mais j'en doute.
Cela ressemble à historique gelé, quelque chose qui, à un moment donné, avait un sens, pour la technologie à l'époque.
Cela ne me semble pas légal C. Est-ce C++? –
@ArlieStephens Oui, mieux vaut supprimer le tag C. C++ sans aucun en-tête nécessaire. –
@ John3136 C++. Construit en type –