3

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

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

4

2 回答 2

2

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

于 2008-11-04T18:43:13.700 回答
1

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

要从函数中返回不可复制的对象,实际上只需实现移动构造函数,如下所示:

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 容器似乎已经支持它。

于 2008-11-04T21:03:12.293 回答