在Stack Overflow的之前回答中,似乎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&)'
这是否符合标准的预期行为?
请注意,先前有一个非常类似的问题(std::ofstream可移动吗?),但似乎标准自那时以来已经改变了(如为什么std::ostream不能被移动?所述),使那些答案过时。当然,没有一个答案能解释上面的代码为什么无法编译。
尝试使用
ofstream
容器时遇到此问题,因为上述原因而无法正常工作。