在IOStreams库中使用ignore(numeric_limits<;streamsize>;::max())是否可以处理任意数量的流? < C++标准(第27.6节1.3节24)中的P> istreamignore()函数在IOStreams库中,它意味着如果您为'n'ofnumeric\u limits::max()提供参数,它将继续忽略字符 直到找到分隔符为止,甚至远远超过实际值 streamsize的最大值(即“n”参数被解释为无限)

在IOStreams库中使用ignore(numeric_limits<;streamsize>;::max())是否可以处理任意数量的流? < C++标准(第27.6节1.3节24)中的P> istreamignore()函数在IOStreams库中,它意味着如果您为'n'ofnumeric\u limits::max()提供参数,它将继续忽略字符 直到找到分隔符为止,甚至远远超过实际值 streamsize的最大值(即“n”参数被解释为无限),c++,iostream,standards,C++,Iostream,Standards,对于gcc实现来说,这似乎确实是如何做到的 ignore()已经实现,但我还不清楚具体实现了什么 这是特定于实现的,还是由标准强制执行的。 有人知道这一点,可以确认这是由 符合标准的iostreams库?根据: 提取和丢弃字符 从输入序列中提取字符并丢弃它们 当n个字符被提取并丢弃时,或当找到字符delim时,以先到者为准,提取结束。在后一种情况下,还将提取delim字符本身 在本例中,当达到字符数的numeric_limits::max()时,满足第一个条件 [每波] 但是,根据规范,只有当n

对于gcc实现来说,这似乎确实是如何做到的
ignore()
已经实现,但我还不清楚具体实现了什么 这是特定于实现的,还是由标准强制执行的。 有人知道这一点,可以确认这是由 符合标准的iostreams库?

根据:

提取和丢弃字符 从输入序列中提取字符并丢弃它们

当n个字符被提取并丢弃时,或当找到字符delim时,以先到者为准,提取结束。在后一种情况下,还将提取delim字符本身

在本例中,当达到字符数的numeric_limits::max()时,满足第一个条件

[每波]


但是,根据规范,只有当n不等于
数值限制::max()
时,才应用上述情况。标准规定
数值限制::max()
是一个特殊值,不会影响跳过的字符数

效果:表现为无格式输入功能(如27.7.2.3第1段所述)。构造哨兵对象后,提取字符并丢弃它们。将提取字符,直到出现以下任一情况:
--如果
n!=数值限制::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)


你的意思是
std::numeric\u limits
,当然可以?你如何向istream对象提供numeric\u limits::max()字符数?你使用的是哪个istream对象?你如何测试该条件?这不可能,因为输入这么多字符大约需要20多个小时。我更感兴趣的是你的测试方式,而不是实际的答案:)@Eric:好吧,如果你在32位机器上编译(没有启用LFS),那么在大于4GB的文件上执行此操作应该达到极限。不,标准明确规定只有当n!=numeric_limits()。它过于简化了,因为它认为对函数的功能进行一些描述比不理解函数功能的准确描述要好。@Steve,谢谢你的建议。参考规范是我们解决此类问题的最终方法。是的,这正是我所说的-它指定了如果n!=numeric_limits::max(),但未指定如果n等于numeric_limits::max()会发生什么;因此,我的解释是,如果n==numeric_limits::max(),则字符不按限制计数。我们只是在寻找分隔符或文件结尾。另一方面,streamsize将是我们拥有的最大整数之一,因此无论如何都很难达到该值。我相信这应该理解为以下内容:(1)有三个条件可以终止循环。(2) 其中之一就是n=已提取最大和n个字符。(3) 其中之一是EOF。(4) 其中之一是分隔符匹配。如果n==max,则(2)永远不会发生,因此只有两种可能的终止条件。在标准规定“如果X,Y”的所有情况下,这意味着Y仅在X为真时适用。如果X为假,则Y不相关。另一种迂腐的逻辑读数是,当n==max时,第一个条件“如果X,则Y”为空真,因为X为假,因此提取立即停止。这不是标准用这种方式表达的意思。无论如何,没有合理的阅读该段落,该段落告诉您当n==max时,“n个字符已提取”是一个终止条件。因此,我们必须得出结论,它不是。
istream&  istream::ignore ( streamsize n = 1, int delim = EOF );