运算符重载 – C 0x T运算符(const T&,T \u0026\u0026)模式,还需要移动吗?

前端之家收集整理的这篇文章主要介绍了运算符重载 – C 0x T运算符(const T&,T \u0026\u0026)模式,还需要移动吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
前段时间我被告知,实现两元操作符的通常模式需要在回报中采取最后的行动.
Matrix operator+(const Matrix &a,Matrix &&b) {
    b += a;
    return std::move(b);
}

但现在有一个特殊的规则,在返回时,编译器可能会将返回值视为临时值,然后这不是必需的 – 简单的返回b就足够了.

但是再一次,b在这个函数中有一个名字,因此,它是一个LValue–这阻碍了编译器认为它是一个临时值,并且需要移动.

在最新版本的C 0x标准中,情况仍然如此吗?我们需要采取行动来实施上述模式吗?

解决方法

在此示例中,您需要显式的std :: move,因为b不是非易失性自动对象的名称.参考12.8 [class.copy] / p31 / b1:
  • in a return statement in a function with a class return type,when
    the expression is the name of a non-volatile automatic object (other than a function or catch-clause parameter) with the same cv- unqualified type as the function return type,the copy/move operation can be omitted by constructing the automatic object directly into the function’s return value

猜你在找的C&C++相关文章