gpt4 book ai didi

c++ - 指针可以存储在 std::mbstate_t 类型中吗?

转载 作者:行者123 更新时间:2023-11-28 08:32:29 24 4
gpt4 key购买 nike

我正在编写一个使用 iconv 的 std::codecvt 方面的实现。 This实现在 std::mbstate_t 状态参数中存储指向堆分配数据的指针。

一切正常,但这段代码是否兼容 64 位?是否存在指针大小超过 std::mbstate_t 大小的平台?

最佳答案

codecvt模板不是把状态类型作为参数吗?你能在那里使用指针类型吗?我不记得使用 codecvt 的各种类是否对状态类型有要求。

假设您不能只更改状态类型...在 MSVC 2008 上,mbstate_ttypedefd 作为 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com