<streamsize>在 IOStreams 库中使用 ignore(numeric_limits::max()) 是否可以处理任意大量的流?
Does using ignore(numeric_limits<streamsize>::max()) in the IOStreams library handle arbitrarily massive streams?
在c++标准(第27.6.1.3节)中,对于istreams库中的istream ignore()
函数,这意味着如果您为numeric_limits::max()
的'n'提供参数,它将继续忽略字符直到找到分隔符为止,甚至远远超出实际流大小的最大值(即'n'参数被解释为无穷大)。
对于gcc实现,这确实看起来是如何ignore()
实现了,但我仍然不清楚这是特定于实现的,还是由标准强制要求的。有谁知道的很清楚这是由a保证的吗标准兼容的iostreams库?
标准规定numeric_limits<streamsize>::max()
是一个不影响跳过字符数的特殊值。
Effects:作为一个未格式化的输入函数(如27.7.2.3第1段所述)。在构造一个哨兵对象后,提取字符并丢弃它们。字符被提取,直到出现以下任何一种情况:
——如果n != numeric_limits<streamsize>::max()
(18.3.2),提取n个字符
——end- file发生在输入序列上(在这种情况下,函数调用setstate(eofbit),这可能会抛出ios_base::failure (27.5.5.4));
——traits::eq_int_type(traits::to_int_type(c), delim)用于下一个可用的输入字符c(在这种情况下,c被提取)。
根据这里:
istream& istream::ignore ( streamsize n = 1, int delim = EOF );
提取并丢弃字符从输入序列中提取字符并丢弃它们。
当提取并丢弃n个字符时,或当找到字符delim时, 以先出现的为准。在后一种情况下,也提取delim字符本身。
在您的示例中,当numeric_limits::max()字符数达到时,满足第一个条件。
(每Bo)但是,根据规范,上述情况仅在n 不等于numeric_limits<streamsize>::max()
时才适用。
- 在提升multi_index容器中,是否定义了"default index"?
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 检查输入是否不是整数或数字
- 是否可以初始化不可复制类型的成员变量(或基类)
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 此代码是否违反一个定义规则
- 是否需要删除包含对象的"pair"?
- 是否可以从int转换为enum类类型
- 无论条件是否为true,if总是在c++中执行
- 如何找到大小'x'数组是否完全填充,在C++?
- 检查值是否在集合p1和p2中,但不在p3中
- 是否可以在编译时初始化数组,以便在运行时不会花费时间?
- 检查 std::shared_ptr<> 的当前底层类型是否为 T
- C++是否在 std::min 和 std::max 下标准化 std::optional 的行为?
- 如果std::max()通过引用返回(这是必须的),这是否会导致悬空引用
- 是否可以对"x = max(a,b); y = min(a,b);"进行微观优化?
- 在 c++ 中,使用 std::numeric_limits<double>::max() 作为特殊"flag"是否安全?
- 正在使用std::max来比较两个替身是否安全
- <streamsize>在 IOStreams 库中使用 ignore(numeric_limits::max()) 是否可以处理任意大量的流?