Stringstream C++ while 循环

NGC*_*543 4 c++ loops stringstream zero

程序在逗号之间找到整数,如“2,33,5”-> 2 33 5。问题是如果我把例如“0,12,4”这样的字符串,它为什么工作。stringstream 不应该将 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;
Run Code Online (Sandbox Code Playgroud)

Cod*_*ice 5

stringstream 不应该将 0 放入 tmp 中,所以循环就像开始时的 while(0) 一样吗?

while 条件是ss >> tmp。如果您查看 的文档cin,您会发现operator>>()返回一个istream&. 它并没有返回输入你刚才读,在这种情况下,int0

此外,istream(或其基类之一)重载operator bool()允许istream对象隐式转换为 a bool,这是while语句条件的结果所需的类型。一个istream对象将评估作为false每当调用过程中发生错误operator>>()。如果没有错误,则计算结果为true

由于输入0是有效的intwhile循环继续下一次迭代。