std::streams 已经可以移动了吗?

Posted

技术标签:

【中文标题】std::streams 已经可以移动了吗?【英文标题】:Are std::streams already movable? 【发布时间】:2010-09-20 16:54:44 【问题描述】:

GNU gcc 4.3 部分支持即将到来的 c++0x 标准:在实现的功能中,右值引用。通过右值引用,应该可以移动不可复制的对象或从函数中返回它。

std::streams 是否已经可以通过右值引用移动,或者当前的库实现是否缺少某些东西?

【问题讨论】:

【参考方案1】:

在当前的 g++ svn 中,还没有为流添加右值引用支持。我怀疑添加它不会太困难,并且与开源软件一样,我敢肯定,补丁是受欢迎的!

【讨论】:

【参考方案2】:

经过快速调查发现,右值引用支持尚未添加到流中。

要从一个函数返回一个不可复制的对象,实现 move 构造函数 就足够了,如下所示:

struct noncopyable

    noncopyable()
    

    // move constructor
    noncopyable(noncopyable &&)
    

private:
    noncopyable(const noncopyable &);
    noncopyable &operator=(const noncopyable &);
;

这样的构造函数应该将所有权转移给新对象,使传递的对象处于默认状态。

也就是说,可以通过这种方式从函数中返回对象:

noncopyable factory()

    noncopyable abc;
    return std::move(abc);

虽然 std::stream 不支持移动构造函数,但 gcc 4.3.2 附带的 STL 容器似乎已经支持它。

【讨论】:

以上是关于std::streams 已经可以移动了吗?的主要内容,如果未能解决你的问题,请参考以下文章

利用PHP str_replace()函数替换符合百度MIP内容标准

你喜欢的库上榜了吗,2021前端/移动端/工具最受欢迎排名

Android - 轨迹球活动结束了吗?

未来,扫码支付会“消失”吗?两项新支付方式已兴起,你准备好了吗

iOS14体验,这些新功能你发现了吗?

pygame已经过时了吗