std::流是否已经可移动

Are std::streams already movable?

本文关键字:可移动 是否 std      更新时间:2023-10-16

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

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

在当前的g++svn中,还没有向流中添加右值引用支持。我怀疑添加它不会太难,而且和开源软件一样,我相信补丁是受欢迎的!

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

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

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不支持move构造函数,但gcc 4.3.2附带的STL容器似乎已经支持它了。