Stringstream c ++ while循环

问题描述 投票:2回答:1

程序找到逗号之间的整数,如“2,33,5” - > 2 33 5.问题是,如果我举例如“0,12,4”这样的字符串,它为什么会起作用。字符串流不应该将0放入tmp,所以循环就像开始时的while(0)一样?

 vector<int> parseInts(string str) {
 stringstream ss(str);   //getting string 
 vector<int> result;
 char ch;
 int tmp;
 while(ss >> tmp) {      //while(IS IT INTEGER ALREADY OR NOT?)
     result.push_back(tmp);
     ss >> ch;           
}
return result;
c++ loops stringstream zero
1个回答
3
投票

字符串流不应该将0放入tmp,所以循环就像开始时的while(0)一样?

而条件是ss >> tmp。如果你查看cin的文档,你会发现operator>>()返回一个istream&。它不会返回您刚读取的输入,在本例中为int0

此外,istream(或其中一个基类)重载operator bool(),它允许istream对象隐式转换为bool,这是while语句条件所需的类型。只要在调用istream期间发生错误,false对象将评估为operator>>()。如果没有错误,则评估为true

由于输入0是有效的int,因此while循环继续下一次迭代。

© www.soinside.com 2019 - 2024. All rights reserved.