【问题标题】:Value of numeric_limits<streamsize>::max() in c++c++ 中 numeric_limits<streamsize>::max() 的值
【发布时间】:2018-10-30 13:56:19
【问题描述】:

在 c++ 中使用 cin.ignore() 时,它需要一个参数,即要消耗的字符数,直到出现分隔符。 大多数情况下,我观​​察到使用以下内容cin.ignore(numeric_limits&lt;streamsize&gt;::max(), '\n');

我很想知道numeric_limtis&lt;streamsize&gt;::max() 的值,所以我只是输出了它的值,它变成了一个巨大的值 9223372036854775807 。 如果它代表字符的数量,那么它可以以字节为单位来考虑,如果是这样,这不是一个非常大的值,超出了我的硬盘空间。

谁能告诉我它实际上是什么以及为什么这么大的价值?

【问题讨论】:

  • 这是流缓冲区理论上可以支持的绝对最大字符数。这实际上是一种表达“在我们看到分隔符之前无限制地忽略字符”的方式。
  • 另外,那个巨大的数字恰好是2^63 - 1,这是一个有符号的64位整数的最大值。
  • 请注意,streamsize 只是一个 typedef。 Afaik 还使用容器,您在推送 numeric_limits&lt;size_t&gt;::max() 元素之前会遇到问题。我认为这些只是告诉您这些类型可以支持什么,而您似乎关心您的物理硬件可以支持什么

标签: c++ byte numeric-limits


【解决方案1】:

这不是超出我的硬盘空间的非常大的值吗?

这正是这个值的目的。您想跳过尽可能多的字符。事实上,这个值确实表示无限,因为count test is disabled for this value:

count 个字符已提取。此测试在特殊情况下被禁用 count 等于 std::numeric_limits::max()

的情况

【讨论】:

    【解决方案2】:

    numeric_limtis&lt;streamsize&gt;::max() 为您提供streamsize 的对象可以容纳的最大值。这实际上并不是缓冲区中可以有多少个字符,它只是缓冲区使用的类型支持的内容。如果您有足够大的机器和足够的内存,那么您可以在缓冲区中获得 9,223,372,036,854,775,807 个字符。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-01
      • 2012-12-01
      • 2015-02-11
      相关资源
      最近更新 更多