如下的語法 :
ifstream InputFile;
InputFile.open("c:\\test.txt");
if ( !InputFile ) {
cout << "Error" << endl;<br>}
問題:
if 裡面若是寫 InputFile.fail() 這能理解, 因為這函數會傳回 bool
但更多人寫的是 if ( !InputFile ) , 這就不理解了, InputFile 是個物件
為什麼能寫 !InputFile 成為個 bool ?
謝謝
----------------
而且我宣告個 bool b1;
b1 = InputFile;
錯誤 C2440 '=': 無法由 'std::ifstream' 轉換為 'bool'
從 "std::ifstream" 到 "bool" 之間沒有合適的轉換函式存在
但寫 b1 = !InputFile; 確又可以通過編譯
-------------------
我發現這二行所生成的 ASM 代碼是一樣的
if ( !InputFile )
if ( InputFile.fail() )
我的疑問是 InputFile 單純是個物件變數, 為何加個 ! 他就變成呼叫 InputFile.fail()
我想了解這招是 C++ 的那個機制 or 觀念。

X