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_tchar16_tchar32_t,c++0x 中wchar_t 的命运是什么?

更重要的是,std::wstringstd::wcout 等呢?

w* 系列课程是否已弃用? 是否有用于新字符类型的新 std::ustringstd::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 u16stringu32string,但没有新的标准流。

【讨论】:

你能确认 std::string 应该包含 utf8 字符吗?或者还有另一种类型吗? u8string? 没有u8stringchar 具有“UTF-8 代码单元”、“基本执行字符集成员”或“字节”的重载含义。 @Klaim - 正如 Dan 所说,std::string 可以(不应该)包含 UTF-8。由应用程序决定解释。该语言已经具有三种窄字符类型,委员会犹豫是否要添加第四种!

以上是关于c++0x中wchar_t的命运如何?的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 中元帅 C++ wchar_t**

如何定义宏以将连接的char字符串转换为C中的wchar_t字符串

C++如何把string类型的字符串负值给wchar_t?求完整实例。

CString 如何转为wchar_t

javascript wchar_t 宽字符 转化为 ascii字符码数组

wchar_t到QString的转换方法?