前段时间我被告知,实现二元运算符的通常模式需要在返回值中添加最后一个move
。
Matrix operator+(const Matrix &a, Matrix &&b) {
b += a;
return std::move(b);
}
现在有一项特殊规则: 在return
中,编译器可以把返回值当做临时变量处理,这样就不需要额外的步骤了——一个简单的return b
就足够了。
但是,b
在这个函数中有一个名称,因此它是一个LValue——这妨碍了编译器将其视为临时变量,所以move
是必需的。
在最近的C++0x标准版本中,这种情况仍然存在吗?我们是否需要使用move
来实现上述模式?
std::move
是不必要的。 - fredoverflowMatrix&&
而不是Matrix
可能会有所不同... - fredoverflow