wchar_t保证与任何整数类型不同
Is wchar_t guaranteed to be distinct from any integer type?
在我的系统上,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_t
和 long int
是相同的类型(相同的属性,is_same
为 true)。
这种wchar_t
的独特性得到保证吗?在所有系统上重载wchar_t
和int
是否安全?除了is_same
之外,是否有任何属性可以区分wchar_t
和相应的int属性?
(系统信息:我对一般情况感兴趣,但到目前为止,我的测试是在运行 g++ 4.8.0 和 Apple clang++ 4.1 的 OS X 机器上进行的,两者都带有 -std=c++11。
是的,wchar_t
保证是不同的类型 (§3.9.1/5):
类型
wchar_t
是一种非重复类型,其值可以表示在受支持的区域设置 (22.3.1) 中指定的最大扩展字符集的所有成员的不同代码。
所以是的,在所有系统上重载wchar_t
和int
是安全的。
但是,wchar_t
也保证与另一种整体类型(即其基础类型)具有相同的大小、符号和对齐要求。这不一定是int
但在您的情况下似乎是。这意味着wchar_t
可能是使用一种整型类型实现的,但就您而言,它们被视为完全不同的类型。
是的,对于 C++11,wchar_t 是它自己的类型,与其他任何类型都不同,但正如您所观察到的,它也将具有与其他类型相同的范围、符号等 (§3.9.1/3):
类型 wchar_t 是一种非重复类型,其值可以表示在受支持的区域设置 (22.3.1) 中指定的最大扩展字符集的所有成员的不同代码。类型 wchar_t 应具有与其他整体类型之一(称为其基础)相同的大小、符号和对齐要求 (3.11) 类型。
- 整数类型应该显式转换(例如"int"到"无符号")还是只会增加混乱?
- 涉及旧式枚举和整数类型的重载解析
- 将字符串转换为整数类型T,检查是否存在溢出
- 整数文本太大,无法用任何整数类型表示--C++
- isdigit(c) - 字符或整数类型?
- 为什么对小于 4 个字节的整数类型的位操作会发生意外行为?
- C++模板专用化 - 将其他整数类型委托给uint64_t
- 何时应使用 C++ 固定宽度整数类型,它们如何影响性能?
- 根据浮点数选择最小整数类型
- 为什么 QVariant 将字符类型视为整数类型
- 我们可以在整数类型的双指针中分配2D整数数组的地址吗?怎么可能
- 默认情况下,决定整数类型是唱歌或无符号的类型
- 是否可以根据类型是整数类型还是浮点类型重载模板函数
- 使用固定整数类型的安全性
- 如何使用条件来检查类型名 T 是否是 C++ 中浮点类型的整数类型
- C++文本整数类型
- 哪种整数类型可以安全且便携式用于始终保持指针值
- 检测整数类型变量上的空白输入
- 为什么对Chrono :: Nanseconds的表示类型是签名的整数类型
- 如何处理警告:从较小的整数类型int转换为int*