可能重复:
我应该返回 const 对象吗?
(那个问题的原标题是:int foo() 还是 const int foo()?解释我为什么错过它。)
有效的 C++,第 3 项:尽可能使用 const。特别是,返回 const 对象被提升以避免像if (a*b = c) {
. 我觉得这有点偏执,但我一直在遵循这个建议。
在我看来,返回 const 对象会降低 C++11 的性能。
#include <iostream>
using namespace std;
class C {
public:
C() : v(nullptr) { }
C& operator=(const C& other) {
cout << "copy" << endl;
// copy contents of v[]
return *this;
}
C& operator=(C&& other) {
cout << "move" << endl;
v = other.v, other.v = nullptr;
return *this;
}
private:
int* v;
};
const C const_is_returned() { return C(); }
C nonconst_is_returned() { return C(); }
int main(int argc, char* argv[]) {
C c;
c = const_is_returned();
c = nonconst_is_returned();
return 0;
}
这打印:
copy
move
我是否正确实施了移动分配?或者我根本不应该在 C++11 中返回 const 对象?