5

私のシステムでは、wchar_tとintは同じプロパティを持つ別個の型です。

#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

対照的に、ptrdiff_tlong intは同じタイプです(同じプロパティであり、is_sametrueです)。

この明確さはwchar_t保証されていますか?すべてのシステムでwchar_t過負荷になっても安全ですか?int区別するプロパティまたは他の場所wchar_tに、対応するintプロパティはありis_sameますか?

(システム情報:一般的なケースに興味がありますが、これまでのテストは、g++4.8.0とAppleclang++ 4.1を実行しているOSXマシンで行われ、どちらも-std = c ++ 11です。)

4

2 に答える 2

9

はい、wchar_t別個のタイプであることが保証されています(§3.9.1/ 5):

タイプwchar_tは、サポートされているロケール(22.3.1)の中で指定された最大の拡張文字セットのすべてのメンバーの個別のコードを値で表すことができる個別のタイプです。

そうです、すべてのシステムで過負荷になっても安全wchar_tですint

ただし、基になる型wchar_tである別の整数型と同じサイズ、符号、および配置要件を持つことも保証されています。これは必ずしもそうではありませんが、あなたの場合はそうであるように見えます。これは、おそらく整数型の1つを使用して実装されることを意味しますが、あなたに関する限り、それらは完全に別個の型として扱われます。intwchar_t

于 2012-12-04T19:11:34.470 に答える
8

はい、C ++ 11の場合、wchar_tは独自のタイプであり、他のタイプとは異なりますが、観察したように、他のタイプと同じ範囲、符号などもあります(§3.9.1/ 3 )::

タイプwchar_tは、サポートされているロケール(22.3.1)で指定されている最大の拡張文字セットのすべてのメンバーの個別のコードを値で表すことができる個別のタイプです。タイプwchar_tは、基になる型と呼ばれる他の整数型の1つと同じサイズ、符号、および配置要件(3.11)を持つ必要があります。

于 2012-12-04T19:12:44.457 に答える