2014-10-10 67 views
2

我嘗試編譯此代碼,但我得到一個錯誤:編譯錯誤嘗試使用矢量時<ostringstream>

#include <sstream> 
#include <vector> 

int main() { 
    std::vector<std::ostringstream> v; 
    v.reserve(100); 
    return 0; 
} 

該錯誤消息說,一些有關無法默認構造ostringstream。在使用gcc或clang進行編譯時,我確實無法理解錯誤消息。爲什麼reserve()嘗試構建任何東西?這裏是代碼:http://ideone.com/lXQRkH

+1

我明白了。保留區可能會​​重新分配,它會嘗試複製,因爲移動不是由gcc執行的。 – petersohn 2014-10-10 13:30:23

+0

@chris您和OP的評論一起提供了一個很好的答案。 – Angew 2014-10-10 13:31:18

+0

@Angew,我猜他們會。我的評論並沒有開始那麼久,但我去鎮上編輯它。 – chris 2014-10-10 13:35:42

回答

1

當呼叫reserve時,向量需要結束有足夠的空間100個元素。這意味着reserve必須有可能複製或移動一切。

流是不可複製的。出於這個原因,它們不能在C++ 11之前存儲在標準容器中。在C++ 11中,可以移動流,使它們在標準容器中正常工作。這裏缺少的一部分是libstdC++目前還沒有實現可移動的流。這個does compile與libC++。

期待在GCC 5.0中看到此工作。

相關問題