2012-12-04 6 views
5

Auf meinem System wchar_t und int sind verschiedene Typen mit den gleichen Eigenschaften:Ist wchar_t garantiert von jedem Integer-Typ zu unterscheiden?

#include <type_traits> 
sizeof(wchar_t) == sizeof(int) == 4 
std::is_signed<wchar_t> == std::is_signed<int> == std::true_type 
std::is_same<wchar_t, int> == std::false_type 

Im Gegensatz dazu ptrdiff_t und long int identische Typen sind (gleiche Eigenschaften und is_same wahr ist).

Ist diese Unterscheidbarkeit von wchar_t garantiert? Ist es sicher, auf allen Systemen für wchar_t und int zu überlasten? Gibt es eine Eigenschaft in oder anderswo, die wchar_t und die entsprechende int-Eigenschaft neben is_same unterscheidet?

(Systeminfo: Ich interessiere mich für den allgemeinen Fall, aber meine Tests waren bisher auf einem OS X-Rechner mit g ++ 4.8.0 und Apple Clang ++ 4.1, beide mit -std = C++ 11.)

Antwort

9

Ja, wchar_t garantiert einen bestimmten Typ sein (§3.9.1/5):

Typ wchar_t ist eine deutliche Art, deren Werte unterschiedliche Codes für alle Mitglieder des größten erweiterten Zeichensatz darstellen angegeben unter den unterstützten Gebietsschemata (22.3.1).

Also ja, es ist sicher für wchar_t und int auf allen Systemen zu überlasten.

Jedoch ist wchar_t auch die gleiche Größe, Signedness und Ausrichtungsanforderungen als eine andere integrale Typ haben gewährleistet, die ihrezugrunde liegenden Typ ist. Dies ist nicht unbedingt int aber in Ihrem Fall scheint zu sein. Dies bedeutet, dass wchar_t wahrscheinlich mit einem der integralen Typen implementiert wird, aber für Sie als vollständig unterschiedliche Typen behandelt werden.

+0

Kurz, süß und auf den Punkt. Ich werde die Antwort akzeptieren, sobald SO es mir erlaubt. – addaon

8

Ja, für C++ 11 ist wchar_t ein eigener Typ, der sich von jedem anderen unterscheidet, aber wie Sie gesehen haben, wird es auch den gleichen Bereich, Signedness usw. haben wie ein anderer Typ (§3.9 .1/3):

Typ wchar_t ist ein eindeutiger Typ, dessen Werte unterschiedliche Codes für alle Elemente des größten erweiterten Zeichensatzes darstellen können, der unter den unterstützten Gebietsschemata (22.3.1) angegeben ist. Der Typ wchar_t muss die gleiche Größe, Signedness und Alignment-Anforderungen (3.11) wie einer der anderen ganzzahligen Typen haben, der so genannte -Typ.

Verwandte Themen