C ++ 11 <codecvt>标头是否在最新的GCC中可用?</codecvt>

时间:2014-07-17 11:20:01

标签: c++ gcc c++11

阅读Is <codecvt> not a standard header?之后我不知道该怎么办,因为我的Windows版代码库使用<codecvt>来在宽字符串和字符串之间进行转换。我目前使用GCC 4.7 for Linux版本的代码。最新的海湾合作委员会中是否还缺少<codecvt>?什么是解决方法?

BTW,正如它所说here,以下代码不适用于GCC:

wstring ws = L"hello";
string ns(ws.begin(), ws.end());

1 个答案:

答案 0 :(得分: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();