当与字符串流一起使用时,>>会做什么?

时间:2019-10-11 06:51:49

标签: c++ c++11

我正在阅读以下代码示例:

var ugs = new UpgradedServices();
for (let [key, value] of Object.entries(ugs.upgradedServices)) {
  $provide.value(key, value);
}

有人可以解释为什么有人会在循环条件区域执行ss >> n吗?对我来说有点奇怪。

2 个答案:

答案 0 :(得分:4)

它将首先从流中读取一个int,然后评估流是否良好。 (因为s >> n将返回对s的引用)。

将流评估为bool:

  

如果流没有错误并且可以进行I / O操作,则返回true。具体来说,返回!fail()。

因此,一旦流无法读取int或到达流的末尾(例如输入的末尾),它将被评估为false并结束循环。

因此,这段代码将从给定的输入中提取最多4个整数(由于&& i < 4,所以提取了4个整数)。

答案 1 :(得分:1)

>>读入表达式右侧的变量并返回流。

在布尔表达式中使用流将返回该流是否没有失败。

您的for循环因此等效于:

int i = 0;
while ( i < 4 )
{
  ss >> n;
  if ( ss.fail() )
  {
    break;
  }
  message[i] = n;
  if (ss.peek() == ';') {
     ss.ignore();
  }
  i++;
}

它最多读取4个数字,如果流的内容不可转换为数字,则停止。