std::流是否已经可移动
Are std::streams already movable?
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容器似乎已经支持它了。
相关文章:
- 仅包含可移动 std::map 的类的移动构造函数不起作用
- 为什么协程的返回类型必须是可移动构造的?
- 我应该使我的局部变量常量还是可移动的
- 对于参加可复制和可移动类的访问者来说,应该有多少过载?
- 如何获取类型是否真正可移动可构造
- 可移动但不可复制的对象:按值传递还是按引用传递?
- 对于可移动类型,按值传递比重载函数更好吗?
- 使用参数将仅可移动对象捕获到 lambda
- 具有抑制移动构造/赋值的类型如何仍被视为可移动类型?
- lambdas的可继承性是否由标准保证
- 防止作用域枚举可复制/可移动
- 禁止可移动的QGraphics物品与其他物品发生冲突
- 在向量中使用派生的可移动但不可压缩的会导致编译错误
- 是否可以创建一个只有const/reference成员的可移动类
- 可移动元素向量的大小调整是否有效?
- 包含boost::可选对象的std::矢量对象是否可以移动?可移动助推::可选
- visual C++标准是否要求自己的迭代器是另一个可移动/可复制的
- 编译器是否在最后一次使用可移动对象时自动使用移动语义?
- 存储可移动物体的"有效性"状态是否是一种好的做法?
- std::流是否已经可移动