在IOStreams库中使用ignore(numeric_limits <streamsize> :: max())是否处理​​任意大量的流?</streamsize>

时间:2011-05-04 03:08:13

标签: c++ iostream standards

在C ++标准(第27.6.1.3节\ 24)中,对于 IOStreams库中的istream ignore()函数,它暗示如果为numeric_limits::max()的'n'提供参数,它将继续忽略字符 永远直到找到分隔符,甚至超出实际范围 streamize的最大值(即'n'参数被解释为无限)。

对于gcc实现,确实看起来确实如此 ignore()已实施,但我仍不清楚 这是执行特定的,还是由标准强制执行的。 知道这一点的人是否可以确认这是由a保证的 符合标准的iostreams库?

2 个答案:

答案 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()时才应用上述情况。