如果(fstreamTest)检查怎么办?它是否正在检查特定的标志?

时间:2016-04-14 18:06:13

标签: c++ fstream

在以下代码中

fstream testFile;
testFile.open("test.txt", ios::in);

if (testFile)
cout << "This if statement is true";

C ++检查什么才能从true返回if(testfile)? 是否检查testFile.goodbit()是否为真?

2 个答案:

答案 0 :(得分:3)

  

为了从if(testfile)返回true,C ++检查了什么?

来自cppreference

  

检查流是否没有错误。

1)返回空指针if   fail()返回true,否则返回非空指针。这个   指针可以隐式转换为bool,可以在布尔值中使用   上下文。 (直到C++11

2)如果流没有错误并准备好,则返回true   I / O操作。具体来说,返回!fail()。 (自C++11

1)operator void*() const;直到 C ++ 11)
2)explicit operator bool() const; C ++ 11)

如果流没有错误,则会返回true,否则会返回false

这使得可以执行以下操作:

while(stream >> value) {
    ...
}

答案 1 :(得分:2)

如上所述,您可以查找定义... http://en.cppreference.com/w/cpp/io/basic_ios/operator_boolhttp://www.cplusplus.com/reference/ios/ios/operator_bool/。最后,它在fstream类上调用一个返回true或false的方法。

该方法的文档说:

Returns whether an error flag is set (either failbit or badbit).

Notice that this function does not return the same as member good,
but the opposite of member fail.

该文档的另一个版本说:

var headlineStore = [
    function headline1(){
       //irrelevant code
    },
    function headline2(){
       //irrelevant code
    },
    function headline4(){
       //irrelevant code
    },
    function headline4(){
       //irrelevant code
    },
    function headline5(){
       //irrelevant code
    }
]


 for(var i = 0; i < headlineStore.length; i++){  //for loop to loop through array named headlineStore

     if(i == 4) //if condition to reset the counter once it reaches 5
     {
         i = 0;
     }

     (function(i){
         setTimeout(function(){
             headlineStore[i]();
         }, 5000  * i);
     }(i)); //Will load each function in the array with timeout increments 
 }