聽說這裡神人比較多
如下的語法 :
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 觀念。
if ( !InputFile )
if ( InputFile.fail() )
我的疑問是 InputFile 單純是個物件變數, 為何加個 ! 他就變成呼叫 InputFile.fail()
我想了解這招是 C++ 的那個機制 or 觀念。
jimmypp wrote:
而且若我宣告個 bool b1;
b1 = InputFile;
錯誤 C2440 '=': 無法由 'std::ifstream' 轉換為 'bool'
從 "std::ifstream" 到 "bool" 之間沒有合適的轉換函式存在
但寫 b1 = !InputFile; 確又可以通過編譯
我用VC++沒有這個問題, 會有warning, 但是不至於compile不過
jimmypp wrote:
我發現這二行所生成的 ASM 代碼是一樣的
if ( !InputFile )
if ( InputFile.fail )
我的疑問是 InputFile 單純是個物件變數, 為何加個 ! 他就變成呼叫 InputFile.fail
我想了解這招是 C++ 的那個機制 or 觀念。
應該不是事實, fail還是個function, 傳回true或false, 而InputFile本質是void*所以可以用if判斷式(就像int一樣)
內文搜尋

X