2010-02-09 26 views

回答

1

感謝誰回答了我所有的人: 我現在測試取決於我已經回答了幾個代碼,並想出了這樣的總結:使用ofstream的

的ios ::出來,甚至默認如果沒有指定任何內容,但如果僅使用withstream的ios :: in,則不會編譯錯誤(除非使用read()或>>或某個ifstream對象),但不會寫入文件。

使用ifstream的: 的ios ::中是默認的,即使沒有指定,但如果你只使用的ios ::出與ifstream的,沒有編譯錯誤(除非你使用write()或< <或一些ofstream對象),但不能從文件中讀取任何信息。

使用fstream: 沒有默認設置,您必須明確確定您要做什麼。否則,沒有編譯錯誤,但你沒有得到你想要的。

至於原來的問題,兩者工作完全一樣!

5

對於一個流,ios::out是默認的,所以沒有什麼區別。我相信指定ios :: out的唯一時間是有區別的,如果你使用fstream,它可以打開閱讀或寫作,或者兩者兼而有之。

+0

no 如果你使用fstream,你既可以寫ios :: out也可以寫ios :: in,你仍然可以從文件中讀寫。 所以不是它總是一樣的寫不寫ios :: out? – 2010-02-09 17:57:38

+0

@Imengineer:我必須檢查確定,但是如果內存服務fstream在默認情況下爲輸入和輸出都打開,但是如果您指定ios :: out,則僅打開輸出,並且如果指定ios :: in,它僅用於輸入。儘管如此,這絕對不是保證。 – 2010-02-09 18:00:34

2

在大多數情況下,我認爲沒有區別,儘管看起來這在技術上可能是特定於實現的。

在我的實現(gcc 3.4.3)中,forstream的open會在ofstream-> open()調用中使用ios ::: out模式,而不管通過構造函數指定什麼,所以它純粹是可選的。如果使用fstream,則情況並非如此,需要明確指定。

2

檢出標準,第27.8.1.3節討論各種ios修飾符(如ios::inios::out),並將它們映射到C fopen()參數。根據標準,如果在打開的文件上沒有指定修飾符,則打開失敗。

在27.8.1.9,我們發現ofstream這樣工作,但是自動指定了ios::out。因此,原始問題的答案是兩者的工作原理完全相同。

我不知道爲什麼人們發現fstream沒有ios::inios::out,但我對標準的閱讀不應該起作用。我會對其他人的27.8.1.3的讀數感興趣。

+0

在哪裏可以找到這個標準? – 2010-02-09 18:24:23

相關問題