假设 .. 的值是否总是安全的。流::int_type 是 >= 0 除了 eof

Is it always safe to assume that values of ..stream::int_type are >= 0 except for eof

本文关键字:gt eof 除了 type int 安全 是否 假设      更新时间:2023-10-16

我想解析一个文件,并使用std::stringstream来解析其内容。我使用get()逐个字符读取它,得到std::stringstream::int_type。现在,在某些情况下,我想使用查找表将ascii字符转换为其他值(例如,判断标识符中是否允许某个字符)。

现在我可以假设我从get()得到的值是非负的,除非它是std::stringstream::traits_type::eof() ?(因此使用它们作为查找表的索引)。

我在标准中找不到关于这方面的任何内容,这可能是由于我缺乏对c++中字节到字符的整个工作方式的理解。

首先看一下basic_stringstream的一般情况。

你不能假设eof()是负的(我没有看到约束和C标准状态宏观WEOF的值可能与EOF的值不同,不必是负的。)

一般来说,int_type来自trait参数,而int_type对于角色特征的描述并没有强制要求to_int_type返回一些正的东西。

现在,stringsteambasic_stringstream<char>,因此使用char_traits<char>;eof是-但我还没找到一个授权,to_int_type非负的值(它不是21.2.3.1,我看到没有办法推断出它从其他限制),但我想知道如果我错过了一些我的期望是,to_int_type(c)必须相当于(int)(unsigned char)c——它是GNU标准c++库的情况下,我有点希望得到同样的行为在C函数在int返回非负的值或返回字符字符。)

char_traits的另一个标准专门化:

  • char_traits<char16_t>char_traits<char32_t>有一个无符号int_type,因此eof()也是正的;

  • char_traits<wchar_t>::to_int_type也没有被强制返回非eof()输入的正值(但与char_traits<char>相反,我没想到会有这样的命令)。