尝试使用vector <ostringstream> </ostringstream>时出现编译错误

时间:2014-10-10 13:12:36

标签: c++ vector stringstream

我尝试编译此代码,但收到错误:

#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 个答案:

答案 0 :(得分:1)

调用reserve时,向量需要有足够的空间容纳100个元素。这意味着reserve必须有可能复制或移动所有内容。

Streams是不可复制的。因此,在C ++ 11之前,它们不能存储在标准容器中。在C ++ 11中,可以移动流,使它们在标准容器中正常工作。这里缺少的是libstdc ++目前尚未实现可移动流。这个does compile和libc ++。

期望在GCC 5.0中看到这一点。