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

标签 c++

我正在编写一个使用 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/

相关文章:

c++ - C++底漆动态数组的初始化程序数量超过了大小

c++将类方法作为参数传递给带有模板的类方法

c++ - 是 C++ * 运算符 "already overloaded?"

c# - 使用 printf 打印字符串值

c++ - 定义双感叹号?

c++ - 使用带 std::thread 的 SFML 的编译器错误

c++ - 从文件中读取未知长度的字符串

c++ - CStdioFile 未声明的标识符

c++ - 如何读取 Windows 服务启动的控制台应用程序的输出

c++ - 我如何布局混合 C 和 C++ 的函数原型(prototype)