首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么不能移动std::ostream?

为什么不能移动std::ostream?
EN

Stack Overflow用户
提问于 2013-12-26 00:06:02
回答 1查看 5.5K关注 0票数 57

显然,流不能被复制。应该可以移动流。根据27.9.1.11 ofstream.cons第4段,可以移动构造std::ofstream ( std::ifstreamstd::fstreamstd::*stringstream变体也是如此)。例如:

代码语言:javascript
复制
#include <iostream>
#include <fstream>
#include <string>

std::ofstream makeStream(std::string const& name) {
    return std::ofstream(name);
}

int main()
{
    std::ofstream out{ makeStream("example.log") };
}

尝试移动std::ostream,例如,让工厂函数根据作为参数传递的URN创建std::ofstreamstd::ostringstream或其他流是不起作用的。根据27.7.3.1oStream,std::ostream (实际上是类模板std::basic_ostream )有一个protected move构造函数。

为什么std::ostream不能自己移动?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-26 00:16:13

最初它们是可移动的。这被证明是我的一个设计缺陷,并由Alberto Ganesh Barbati发现:

http://cplusplus.github.io/LWG/lwg-defects.html#911

这个问题显示了一些ostream被移动和/或交换的例子,结果令人惊讶,而不是预期的。我确信,这些类型不应该公开移动,也不应该因为这个问题而改变。

票数 60
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20774587

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档