我尝试编译此代码,但收到错误:
#include <sstream>
#include <vector>
int main() {
std::vector<std::ostringstream> v;
v.reserve(100);
return 0;
}
错误消息说明无法默认构造ostringstream
。在使用gcc或clang编译时,我真的无法理解错误消息。为什么reserve()
会尝试构建任何东西?以下是代码:http://ideone.com/lXQRkH
答案 0 :(得分:1)
调用reserve
时,向量需要有足够的空间容纳100个元素。这意味着reserve
必须有可能复制或移动所有内容。
Streams是不可复制的。因此,在C ++ 11之前,它们不能存储在标准容器中。在C ++ 11中,可以移动流,使它们在标准容器中正常工作。这里缺少的是libstdc ++目前尚未实现可移动流。这个does compile和libc ++。
期望在GCC 5.0中看到这一点。