2013-01-08 23 views
2

當我嘗試使用vector <fstream>時,它輸出一個編譯錯誤。爲什麼C++禁止fstream的向量?爲什麼我不能使用fstream向量?

+0

在非C++編譯器11的一個可能(不一定明智)解決方法是使用一個'的std ::矢量<性病:: fstream的*>'... – us2012

回答

10

因爲fstream的是不可拷貝

+1

從技術上講,'fstream'在C++ 11中只是「可移動的」,因爲這個概念在C++ 03中不存在。在C++ 11中,可以將可移動類型放入C++ 11的'std :: vector'中。所以他的代碼將在C++ 11編譯器中編譯。 –

+0

@NicolBolas,老實說,我不得不說[這篇文章](http://liveworkspace.org/code/3Ftdq5%246)是我見過的最大的錯誤代碼比率。不應該這樣工作,還是我對一些移動語義的事情感到無聊? – chris

+1

@chris:錯誤是由於GCC試圖在它的emplace_back實現中使用move_if_noexcept(或者基於它的東西)(在矢量必須增長的情況下,即使在它未被使用的情況下也必須編譯運行)。但是,fstream的移動構造函數沒有被標記爲「noexcept」,要求它退回到複製版本。 –

相關問題