[英]Is it always safe to assume that values of ..stream::int_type are >= 0 except for eof
我想解析一个文件,并使用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中相同的行为,在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>
相反,我不希望这样的命令存在)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.