1

使用std::codecvt'sin方法将外部字节序列解码为内部字符序列时,是否存在内部字符的目标缓冲区需要空间容纳多个内部字符的情况?

这里有一些代码供参考:

// 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);

这是我编写的一些模板代码的简化,用于解码从 Winsock 单独读取的字节SOCKET,其中用户需要“无缓冲”输入。基本上,每次循环迭代时,都会将一个字节读入外部缓冲区。当in_resis not时循环终止std::codecvt_base::partial

我想知道的是:是否存在调用in()目标缓冲区中的多个内部字符需要空间的情况?即,是否存在使上述循环成为无限循环的场景?

4

1 回答 1

3

§22.4.1.4.2/3在这种程度上有一个注释:

basic_filebuf假设从内部字符到外部字符的映射是1N一个codecvt被使用的构面basic_filebuf必须能够一次翻译一个内部字符

听起来任何适合 IO 流的语言环境也适合您使用。

于 2011-11-22T22:49:03.747 回答