繁体   English   中英

总是可以安全地假设..stream :: int_type的值> = 0(除eof之外)

[英]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返回正数。

现在, 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中相同的行为,在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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM