以下代码片段旨在尝试使用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;}
答案 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),则此指针是空指针,否则它是非零指针。
当您的流用于if
,while
或for
条件时,系统会调用此运算符。当您需要编写
!
运算符
if (!(myStream >> num)) {
...
}