Stringstream C++ while 循环

Stringstream c++ while loop

程序找到逗号之间的整数,例如“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;

shouldn't the stringstream put 0 into tmp so the loop was like while(0) at the beginning?

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

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

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