【问题标题】:Why can't I use a fstream vector?为什么我不能使用 fstream 向量?
【发布时间】:2013-01-08 03:09:30
【问题描述】:

当我尝试使用 vector <fstream> 时,它会输出编译错误。为什么C++禁止fstream的向量?

【问题讨论】:

  • 在非 C++11 编译器上可能(不一定明智)的解决方法是使用 std::vector <std::fstream*> ...

标签: c++ c++11 vector fstream


【解决方案1】:

因为 fstream 不可复制

【讨论】:

  • 从技术上讲,fstream 仅在 C++11 中是“可移动的”,因为该概念在 C++03 中不存在。在 C++11 中,您可以将可移动类型放入 C++11 std::vector。所以他的代码可以在 C++11 编译器上编译。
  • @NicolBolas,老实说,我不得不说this piece 是我见过的最大的错误码比。这不应该工作,还是我对一些移动语义的事情很傻?
  • @chris:错误是由于 GCC 试图在 emplace_back 的实现中使用 move_if_noexcept (或基于它的东西)(在向量必须增长的情况下,即使在在运行时不使用它的情况)。但是,fstream 的移动构造函数没有标记为“noexcept”,要求它回退到复制版本。
  • @DaveS,啊,我明白了。如果你问我有点奇怪,但我会接受。
  • @DaveS:但是,如果只有一个移动构造函数,std::vector 无论如何都会移动,而不管noexcept-ness。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-15
  • 2011-05-08
  • 2013-06-09
相关资源
最近更新 更多