ustring - std::string/std::wstring 的就地替换?

Posted

技术标签:

【中文标题】ustring - std::string/std::wstring 的就地替换?【英文标题】:ustring - an inplace replacement of std::string/std::wstring? 【发布时间】:2011-12-06 13:46:43 【问题描述】:

C++ and UTF8 - Why not just replace ASCII? 的延续

为什么没有std::ustring 可以在新应用程序中同时替换std::stringstd::wstring

当然在标准库中有相应的支持。与boost::filesystem3::path 不关心字符串表示并与std::stringstd::wstring 一起工作的方式类似。

【问题讨论】:

【参考方案1】:

你为什么要替换任何东西?

stringwstring 是对应于charwchar_t 的字符串类,在与环境接口的上下文中,它们分别用于携带编码为“系统的窄多字节表示”的数据”和“系统编码”中的固定宽度。

另一方面,u8/u/U,以及char16_tchar32_t,以及相应的字符串类,用于存储编码为UTF-8/16/32。

后者是与前者不同的问题域。该标准不包含桥接两个域的机制(并且通常需要诸如 iconv() 之类的库来使此桥具有可移植性,例如通过转码 WCHAR_T/UTF-32)。

这是我的标准相关问题列表:#1、#2、#3

【讨论】:

【参考方案2】:

std::u16stringstd::u32string。您可能想要使用这些的标准库,例如命名要使用 fstream 打开的文件,不会更改为使用这些,因为它们确实不能。例如,某些平台采用几乎任意字节字符串来命名要打开的文件,而没有指定编码。必须通过具有特定编码的字符串运行它会破坏事情并且不兼容。

【讨论】:

这些仅在C++11/C++0x 中可用,并非所有编译器或操作系统都完全支持。

以上是关于ustring - std::string/std::wstring 的就地替换?的主要内容,如果未能解决你的问题,请参考以下文章

我啥时候应该使用 std::string / std::string_view 作为参数/返回类型

创建 boost::tuple<std::string, std::string, int> 和 std::vector<int> 的映射

vc++中std::string/std::wstring的宏是啥?

std::string,std::vector,std::accumulate注意事项

如何将CString和:: std :: string :: std :: wstring互相转换?

BSTR 到 std::string (std::wstring) 反之亦然