c++0x中wchar_t的命运如何?
Posted
技术标签:
【中文标题】c++0x中wchar_t的命运如何?【英文标题】:What is the fate of wchar_t in c++0x? 【发布时间】:2011-08-25 05:50:13 【问题描述】:考虑到新的字符类型char8_t
、char16_t
和char32_t
,c++0x 中wchar_t
的命运是什么?
更重要的是,std::wstring
、std::wcout
等呢?
w* 系列课程是否已弃用?
是否有用于新字符类型的新 std::ustring
和 std::Ustring
类?
【问题讨论】:
见***.com/questions/872491/…。它不能回答你所有的问题(即弃用),但我猜 wchar_t 不会被弃用。已有太多代码在使用它。 @Boaz Yaniv:更不用说弃用通常没有任何意义。实现者实现已弃用的东西是因为他们需要编译旧软件,而没有人会因为弃用警告而重写旧软件。 @David:尤其是在 C++ 中。在 03 中,无论如何,弃用被定义为“该功能可能会在标准的未来版本中被删除”。所以符合标准的编译器必须实现它。事实证明,即使是未弃用的特性也可能在标准的未来版本中被删除,因为 C++0x 有一些与 C++03 中弃用的东西无关的向后不兼容性。所以所有弃用的真正意思是,“我们不确定我们是否真的想把它放进去,但我们做到了。kthxbye,作者”。 因为 Windows API 使用 UTF-16。 @tchrist:与您可能使用int32_t
而不是long
的原因相同——因为您更喜欢在没有存在怀疑和不确定性的情况下编写代码,即不知道您的类型所持有的值范围。根据代码的作用,消除可能性可能会使推理变得更容易,因为所有平台的行为(更接近)相同。此外,unicode 文字的类型为 char16_t[]
(对于 u
)或 char32_t[]
(对于 U
),而不是类型 wchar_t[]
(即 L
)。我没有看到 UTF-16 的魅力,但有些人 (MS) 似乎喜欢它。
【参考方案1】:
wchar_t 没有任何变化,它仍然是特定于实现的(并且与 C 兼容)。
新类型 char16_t 和 char32_t 在新标准中定义了语义。旧的 wchar_t 可能 相当于其中之一,但在不同的实现中可能是不同的。或者在某些系统上都没有。
对于新字符类型的字符串,您将有 typedef u16string
和 u32string
,但没有新的标准流。
【讨论】:
你能确认 std::string 应该包含 utf8 字符吗?或者还有另一种类型吗? u8string? 没有u8string
。 char
具有“UTF-8 代码单元”、“基本执行字符集成员”或“字节”的重载含义。
@Klaim - 正如 Dan 所说,std::string 可以(不应该)包含 UTF-8。由应用程序决定解释。该语言已经具有三种窄字符类型,委员会犹豫是否要添加第四种!以上是关于c++0x中wchar_t的命运如何?的主要内容,如果未能解决你的问题,请参考以下文章
如何定义宏以将连接的char字符串转换为C中的wchar_t字符串
C++如何把string类型的字符串负值给wchar_t?求完整实例。