使用stringstream>> if语句中的运算符

时间:2013-02-10 23:50:55

标签: c++ stringstream

以下代码片段旨在尝试使用stringstream对象从字符串中提取整数,并检测整数提取是否成功。 stringstream类继承>> operator返回对istream实例的引用。如果失败的整数提取导致myStream等于0,而其str成员仍然是strInput?

stringstream myStream(strInput);
if (myStream >> num){//successfull integer extraction}
else{//unsuccessfull integer extraction
cout<<myStream<<endl;
cout<<myStream.str().c_str()<<endl;}

2 个答案:

答案 0 :(得分:4)

operator bool()有一个operator void*()stream,它返回(类似)!fail() - 如果void *失败,则为operator >> 。所以,如果流没有失败,那很好。 stream返回对bool对象的引用,因此编译器说“嗯,无法将流对象与真实进行比较,让我们看看我们是否可以创建void *,或{ {1}}来自它,是的,我们可以,所以让我们使用它。

答案 1 :(得分:1)

答案是操作员converts std::ios to void*(替换为operator to convert basic_ios to a bool in C++11):

  

从ios派生的流对象可以转换为指针。如果设置了其中一个错误标志(failbit或badbit),则此指针是空指针,否则它是非零指针。

当您的流用于ifwhilefor条件时,系统会调用此运算符。当您需要编写

时,还有一个一元!运算符
if (!(myStream >> num)) {
    ...
}