关于c ++:使用stringstream>>

using stringstream >> operator in if statement

下面的代码段用于尝试使用Stringstream对象从字符串中提取整数,并检测整数提取是否成功。Stringstream类继承>>运算符以返回对IStream实例的引用。整数提取失败如何导致mystream在str成员仍为strinput时等于0?

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


有在operator bool()operator void*()for stream(什么样),它返回的情况!fail()void *a零当它失败。因此,如果流并没有失败,这是好的。在一个streamoperator >>归来的参考对象的编译器,所以说"嗯,不能流到比较对象的真理,让我们看看如果我们能做一void *bool,或从它,是的,我们可以使用,是吧。


答案是在运营商是最std::iosvoid*(取代一个操作转换到一个boolbasic_ios在C + + 11):

A stream object derived from ios can be casted to a pointer. This pointer is a null pointer if either one of the error flags (failbit or badbit) is set, otherwise it is a non-zero pointer.

当你得到这个操作符被称为流是在ifwhile,或for状态。也有一个unary !算子为例,当你需要写

1
2
3
if (!(myStream >> num)) {
    ...
}