我正在阅读以下代码示例:
var ugs = new UpgradedServices();
for (let [key, value] of Object.entries(ugs.upgradedServices)) {
$provide.value(key, value);
}
有人可以解释为什么有人会在循环条件区域执行ss >> n吗?对我来说有点奇怪。
答案 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个数字,如果流的内容不可转换为数字,则停止。