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