我正在编写一个使用 iconv 的 std::codecvt 方面的实现。 This实现在 std::mbstate_t 状态参数中存储指向堆分配数据的指针。
一切正常,但这段代码是否兼容 64 位? 是否存在指针大小超过 std::mbstate_t 大小的平台?
最佳答案
codecvt
模板不是把状态类型作为参数吗?你能在那里使用指针类型吗?我不记得使用 codecvt
的各种类是否对状态类型有要求。
假设您不能只更改状态类型...在 MSVC 2008 上,mbstate_t
是 typedef
d 作为 int
。该标准只要求 int
大于 16 位且不大于 long,因此它不是 64 位安全的。我想您需要将索引或键存储到某些数据结构中,而不是指针。
更新:
至少在VS2008下编译如下:
std::wstring const in = L"input";
size_t const buf_size = 256;
char* buf = new char[buf_size];
wchar_t const* char_next;
char * byte_next;
void* state = NULL;
typedef std::codecvt<wchar_t, char, void*> codecvt_t;
codecvt_t::result res =
std::use_facet<codecvt_t>(std::locale()).out(
state, in.c_str(), in.c_str() + in.length(),
char_next, &buf[0], &buf[buf_size], byte_next);
关于c++ - 指针可以存储在 std::mbstate_t 类型中吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1319160/