看看之前关于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
的容器时遇到了这个问题,由于上面的原因而无法工作。
https://stackoverflow.com/questions/28775673
复制相似问题