当使用std::codecvt
的{{1}}方法将外部字节序列解码为内部字符序列时,是否存在内部字符的目标缓冲区需要多个内部字符空间的情况?
以下是一些供参考的代码:
in
这是我编写的一些模板代码的简化,用于解码从Winsock // const std::locale& loc;
// mbstate_t state;
// const char *extern_buf_ptr;
// const char *extern_buf_eptr;
const std::codecvt<wchar_t, char, mbstate_t> *pcodecvt = &std::use_facet<std::codecvt<wchar_t, char, mbstate_t> >(loc);
wchar_t intern_char;
wchar_t *tmp;
std::codecvt_base::result in_res = pcodecvt->in(state,
extern_buf_ptr, extern_buf_eptr, extern_buf_ptr,
&intern_char, &intern_char + 1, tmp);
单独读取的字节,用户希望“无缓冲”输入。基本上,随着循环的每次迭代,一个字节被读入外部缓冲区。当SOCKET
不是in_res
时,循环终止。
我想知道的是:是否存在对std::codecvt_base::partial
的调用需要在目标缓冲区中为多个内部字符留出空间的情况?即,是否存在使上述循环成为无限循环的情景?
答案 0 :(得分:3)
§22.4.1.4.2/3
中有一个注释:
basic_filebuf
假设从内部字符到外部字符的映射为1
到N
:codecvt
使用的basic_filebuf
方面必须能够一次翻译一个内部字符
听起来像任何适合IO流的区域设置都适合您的使用。