在C ++标准(第27.6.1.3节\ 24)中,对于
IOStreams库中的istream ignore()
函数,它暗示如果为numeric_limits::max()
的'n'提供参数,它将继续忽略字符
永远直到找到分隔符,甚至超出实际范围
streamize的最大值(即'n'参数被解释为无限)。
对于gcc实现,确实看起来确实如此
ignore()
已实施,但我仍不清楚
这是执行特定的,还是由标准强制执行的。
知道这一点的人是否可以确认这是由a保证的
符合标准的iostreams库?
答案 0 :(得分:5)
标准说numeric_limits<streamsize>::max()
是一个特殊值,不会影响跳过的字符数。
效果:表现为无格式输入功能(如27.7.2.3,第1段所述)。构造一个岗位对象后,提取字符并丢弃它们。提取字符直到出现以下任何一种情况:
- 如果n != numeric_limits<streamsize>::max()
(18.3.2),则提取n个字符 - 文件结束发生在输入序列上(在这种情况下,函数调用setstate(eofbit),这可能会抛出ios_base :: failure(27.5.5.4));
- traits :: eq_int_type(traits :: to_int_type(c),delim)用于下一个可用输入字符c(在这种情况下c被提取)。
答案 1 :(得分:0)
根据here:
istream& istream::ignore ( streamsize n = 1, int delim = EOF );
提取并丢弃字符 从输入序列中提取字符并将其丢弃。
当找到n个字符时,提取结束并在找到字符分隔符时或,以先到者为准。在后一种情况下,也会提取delim字符本身。
在您的情况下,当达到numeric_limits :: max()个字符数时,就满足第一个条件。
[Per Bo]
但是,根据规范,仅当n 不等于numeric_limits<streamsize>::max()
时才应用上述情况。