請問 C++ 的 ifstream

如下的語法 :

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 觀念。
2017-09-06 9:34 發佈
文章關鍵字 C++ ifstream
如果InputFile為null的話!InputFile即為true
這裡只是用來檢測讀檔是否失敗
lyre1710 wrote:
如果InputFile為null的話!InputFile即為true


InputFile 已是個物件,不會變成 null

lyre1710 wrote:
這裡只是用來檢測讀檔是否失敗


是的
我發現這二行所生成的 ASM 代碼是一樣的

if ( !InputFile )
if ( InputFile.fail() )

我的疑問是 InputFile 單純是個物件變數, 為何加個 ! 他就變成呼叫 InputFile.fail()
我想了解這招是 C++ 的那個機制 or 觀念。
jimmypp wrote:
我發現這二行所生成...(恕刪)


operator overloading

從ios繼承operator!

lyre1710 wrote:
operator overloading...(恕刪)


謝謝!

jimmypp wrote:
謝謝!...(恕刪)


if ( !InputFile ) 會去呼叫 std::basic_ios::operator bool



if ( !InputFile ) {

光是這一行就有二個地方條件不明

InputFile物件本身有沒有定義物件回傳的類別?
! 運算字有沒有重載?

C++本來就很多可玩的,也算是陷阱題,看一下原來的定義吧
內文搜尋
X
評分
評分
複製連結
Mobile01提醒您
您目前瀏覽的是行動版網頁
是否切換到電腦版網頁呢?