最新版本的GCC中是否有C++11 <codecvt>头文件?

6
在阅读完<codecvt>不是标准头文件吗?”之后,我不确定该怎么做,因为我的Windows版本的代码库使用<codecvt>在宽字符串和字符串之间进行转换。我目前在Linux版本的代码中使用GCC 4.7。最新版的GCC也没有<codecvt>吗?有什么解决方法?
顺便说一下,正如这里所述,以下代码在GCC中无法工作:
wstring ws = L"hello";
string ns(ws.begin(), ws.end());

2
请查看此处:https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.2011。 - n. m.
wstring是basic_string<wchar_t>的typedef。从n.m.提供的链接中可以看出,GCC只缺少codecvt<char16_t>和codecvt<char32_t>。因此你的代码片段应该可以工作。你能否提供更详细的不起作用的代码? - Peng Zhang
上面的代码不是我想要运行的。我在谈论codecvt特定的东西。正如SO线程中所述,上面的代码不可靠,这听起来很合理。 - Michael IV
1个回答

1
您可以使用 mbsrtowcswcsrtombs。虽然它们源自 C 语言,但与 std::stringstd::wstring 不太方便(但您始终可以基于它们创建自己方便的 C++ 函数)。此外,转换基于当前安装的 C 区域设置执行。因此,您的示例代码段可以更改为以下内容:
std::mbstate_t state = {};
const wchar_t* p = L"hello";
std::string ns(std::wcsrtombs(NULL, &p, 0, &state) + 1);
std::wcsrtombs(&ns[0], &p, ns.size(), &state);
ns.pop_back();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接