> v1 && ss2 >> v2 -6ren">
gpt4 book ai didi

c++ - stringstream operator>> 停止问题

转载 作者:行者123 更新时间:2023-11-28 00:04:12 26 4
gpt4 key购买 nike

我有以下代码超出了我的预期,但我不知道为什么。

stringstream ss1("01"), ss2("1");
int v1, v2;
while (ss1 >> v1 && ss2 >> v2 && v1 == v2) {}
if (ss1 && !ss2)
cout << 1;
else if (!ss1 && ss2)
cout << -1; // <== this line will execute
else
cout << 0;

我预计结果会是 cout << 0 , 但它执行行 cout << 1 , 这意味着 !ss1 && ss2true .

!ss1 && ss2true , 表示 ss2还没有停止。为了检查这一点,我又添加了两行,这样代码就变成了

stringstream ss1("01"), ss2("1");
int v1, v2;
while (ss1 >> v1 && ss2 >> v2 && v1 == v2) {}
while (ss2 >> v2) // these two lines are added to check
cout << "v2: " << v2 << endl; // whether ss2 really goes to the end.
if (ss1 && !ss2)
cout << 1;
else if (!ss1 && ss2)
cout << -1;
else
cout << 0;

但是,cout << "v2: " << v2 << endl; 行没有运行。

那么谁能指出问题出在哪里?

最佳答案

让我们看一下 while 循环:

  1. ss1 >> v1 被执行,结果为 true (v1 == 1)
  2. ss2 >> v2 被执行,结果为 true (v2 == 1)
  3. v1 == v2 被执行,结果为 true
  4. 循环体被执行(没有任何反应,它是空的)
  5. ss1 >> v1 被执行,结果为 false,因为 ss1 中没有更多的 int >

这意味着其余的条件将不会被执行,因为有什么意义呢? while 循环不会重复,因为一个值已经是false。这称为短路评估

ss1 提取失败,所以返回false,但是ss2 没有尝试提取,所以返回true,因此您的输出:-1

关于c++ - stringstream operator>> 停止问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36666378/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com