程序找到逗号之间的整数,如“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;
字符串流不应该将0放入tmp,所以循环就像开始时的while(0)一样?
而条件是ss >> tmp
。如果你查看cin
的文档,你会发现operator>>()
返回一个istream&
。它不会返回您刚读取的输入,在本例中为int
值0
。
此外,istream
(或其中一个基类)重载operator bool()
,它允许istream
对象隐式转换为bool
,这是while
语句条件所需的类型。只要在调用istream
期间发生错误,false
对象将评估为operator>>()
。如果没有错误,则评估为true
。
由于输入0
是有效的int
,因此while
循环继续下一次迭代。