" stringstream>>"的返回值是多少?例如," stringstream_obj>>的返回值int_obj&#34 ;.我知道返回类型仍然是流,因为" istream&运营商GT;> (int& val)"。但是它的价值是什么?具体来说,这是我的代码。
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int main (void)
{
stringstream sss(string("0"));
int num;
if (sss >> num) // don't understand here
cout << "true" << endl;
else
cout << "false" << endl;
//output "true"
return 0;
}
作为评论,为什么输出为真? sss只包含1个字符。一旦&#34; sss&gt;&gt; num&#34;,返回&#34; stringstream&#34;应该有空的内容,因此括号的值应该是假的。
理解的,
答案 0 :(得分:2)
operator>>
返回对流的引用。然后,在if
的上下文中,流通过conversion operator转换为bool
,其中包含:{/ p>
如果流没有错误,则为true,否则为false。
您已成功阅读“0”,因此该流没有错误,请再次阅读,您会看到该流有错误,if(sss)
评估为false
。
答案 1 :(得分:0)
在c ++中,当>>
与流一起使用时,它会返回
http://www.cplusplus.com/reference/istream/istream/operator%3E%3E/
在您的案例中,运算符&gt;&gt; sss >> num
返回sss
(我假设您正在使用c ++ 11,它看起来像)
然后你的sss aka stringstream有一个bool operator 如果转换成功,则返回true
所以总结一下if语句更像是
if( convert sss to int and check if successful)
// success
else
// fail
这是你可以阅读的好讨论 http://www.cplusplus.com/forum/articles/6046/