【发布时间】:2015-04-30 18:59:00
【问题描述】:
查看之前关于 SO 的答案,似乎std::ostream 不可移动,std::ofstream 应该是。但是,这段代码
#include <fstream>
int main()
{
std::ofstream ofs;
std::ofstream ofs2{std::move(ofs)};
}
似乎没有在我尝试过的任何版本的 gcc 或 clang 中编译(使用 --std=c++11 或 --std=c++14)。编译器错误有所不同,但这是我从 gcc 4.9.0 得到的结果
6 : error: use of deleted function 'std::basic_ofstream::basic_ofstream(const std::basic_ofstream&)'
根据标准,这是预期的行为吗?
请注意,之前曾提出过一个非常相似的问题(Is std::ofstream movable?),但从那时起标准似乎发生了变化(详见 Why can't std::ostream be moved? )使这些答案过时。当然,这些答案都没有解释为什么上面的代码不能编译。
尝试使用ofstream的容器时遇到了这个问题,由于上述原因,它不起作用。
【问题讨论】:
-
使用 --std=c++11 在 freebsd 上使用 Clang 3.4.1 编译良好。
标签: c++ c++11 gcc clang fstream