假设 .. 的值是否总是安全的。流::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
返回一些正的东西。
现在,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>
相反,我没想到会有这样的命令)。
- 如何确定我已使用非编码文件到达 EOF?
- EASTL矢量<向量<int>>连续的
- std::ifstream::read 不会读取所有 512 字节,并设置 EOF 和失败位
- 而(!inputfile.eof())只读取第一行?
- EOF有更安全的替代方案吗?它在我的情况下不起作用
- "错误 C0000:语法错误,令牌"<EOF>"处出现意外$end,并且不确定
- 如何在 EOF 之前从文件中读取并将其放入字符串中?
- 如何在从文件中读取整数时使用 file.eof()?
- "eof"可以设置为流吗?
- 吃完 EOF 后重复使用 std::cin
- 文件处理,eof() 定义
- std::cin 在读取 EOF 并清除后不再读取
- 为什么 EOF 在循环扫描期间没有终止?
- cin.clear()是否保留EOF
- 而(getline(fin,str)){}即使在到达eof之后仍在处理数据
- 通过终端在文件中输入时检测EOF(文件结束)时出现问题
- 为什么如果我从键盘输入EOF克里昂不要在运行窗口打印程序的输出?
- 为什么"cin"在EOF之后不再wοrk?
- 在 <char>sizeof(int) == 1 的平台中如何编码 char_traits::eof() ?
- 读取 c++ istream 直到 EOF,同时丢弃内容