我想解析一个文件,并使用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
返回一些正的东西。
现在,stringsteam
是basic_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>
相反,我没想到会有这样的命令)。