最新的GCC中是否提供C++ 11 <codecvt>标头?

Mic*_* IV 6 c++ gcc c++11

看完后<codecvt>不是一个标准的头?我不知道该怎么做,因为我的Windows版本的代码库用于<codecvt>在宽字符串和字符串之间进行转换.我目前使用GCC 4.7 for Linux版本的代码.难道<codecvt>还缺少最新的GCC?什么是解决方法?

顺便说一下,正如这里所说,以下代码不适用于GCC:

wstring ws = L"hello";
string ns(ws.begin(), ws.end());
Run Code Online (Sandbox Code Playgroud)

Lin*_*gxi 1

mbsrtowcs使用and怎么样wcsrtombs?虽然它们来自 C,但与std::stringand一起使用并不是很方便std::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();
Run Code Online (Sandbox Code Playgroud)