前段时间有人告诉我,实现二元运算符的通常模式需要move
在返回中使用 final。
Matrix operator+(const Matrix &a, Matrix &&b) {
b += a;
return std::move(b);
}
但是现在有一个特殊规则,在return
编译器中可能会将返回值视为临时值,然后就没有必要了——一个简单的return b
就足够了。
但话又说回来,在这个函数中b
有一个名字,因此,它是一个LValue——这会阻碍编译器将它视为临时变量,并且move
是必需的。
在最新版本的 C++0x 标准中仍然是这种情况吗?我们需要move
实现上述模式吗?