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

Dan*_*ell 3 c++ standards iostream

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

对于gcc实现,这确实看起来是如何 ignore()实现的,但是我仍然不清楚这是特定于实现还是由标准强制执行.知道这一点的人是否可以确认标准兼容的iostreams库可以保证这一点?

Bo *_*son 5

标准表示这numeric_limits<streamsize>::max()是一个特殊值,不会影响跳过的字符数.

效果:表现为无格式输入函数(如27.7.2.3,第1段所述).构造一个岗位对象后,提取字符并丢弃它们.提取字符直到出现以下任何一种情况:
- 如果n != numeric_limits<streamsize>::max()(18.3.2),提取n个字符
- 在输入序列上发生文件结束(在这种情况下,函数调用setstate(eofbit),这可能会抛出ios_base ::失败(27.5.5.4));
- traits :: eq_int_type(traits :: to_int_type(c),delim)用于下一个可用输入字符c(在这种情况下c被提取).