【问题标题】:Is wchar_t guaranteed to be distinct from any integer type?wchar_t 是否保证与任何整数类型不同?
【发布时间】:2012-11-22 12:10:09
【问题描述】:

在我的系统上,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_same 为真)。

wchar_t 的这种独特性是否得到保证?在所有系统上为wchar_tint 过载是否安全?除了is_same之外,是否有任何属性可以区分wchar_t和对应的int属性?

(系统信息:我对一般情况感兴趣,但到目前为止我的测试是在运行 g++ 4.8.0 和 Apple clang++ 4.1 的 OS X 机器上进行的,两者都使用 -std=c++11。)

【问题讨论】:

    标签: c++ c++11 wchar-t


    【解决方案1】:

    是的,wchar_t 保证是一个独特的类型(§3.9.1/5):

    Type wchar_t 是一个独特的类型,其值可以代表在受支持的语言环境 (22.3.1) 中指定的最大扩展字符集的所有成员的不同代码。

    所以是的,在所有系统上对 wchar_tint 进行重载是安全的。

    不过,wchar_t 也保证与另一个整数类型(它的基础类型)具有相同的大小、符号和对齐要求。这不一定是int,但在您的情况下似乎是。这意味着wchar_t 可能是使用其中一种整数类型实现的,但就您而言,它们被视为完全不同的类型。

    【讨论】:

    • 短小精悍,切中要害。我会尽快接受答案。
    【解决方案2】:

    是的,对于 C++11,wchar_t 是它自己的类型,不同于任何其他类型,但正如您所观察到的,它也将具有与其他类型相同的范围、符号等(第 3.9 节)。 1/3):

    类型 wchar_t 是一个独特的类型,其值可以表示支持的语言环境 (22.3.1) 中指定的最大扩展字符集的所有成员的不同代码。 wchar_t 类型应具有与其他整数类型之一相同的大小、符号和对齐要求 (3.11),称为其底层 输入。

    【讨论】:

      猜你喜欢
      • 2014-07-08
      • 2020-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-25
      • 2017-03-28
      • 2022-01-23
      • 2016-10-11
      相关资源
      最近更新 更多