函数返回值不应为常量对象
8.30 ID_returnConstObject
函数返回常量对象不利于移动构造或移动赋值等机制,也可能本意是返回引用,但遗漏了引用符号。
示例:
const vector<int> foo() { // Non-compliant
return { 1, 2, 3 };
}
int main() {
vector<int> v;
v = foo(); // Call the copy assignment operator
}
例中 foo 返回常量对象,对 v 对象赋值时只能进行深拷贝,无法利用移动赋值等机制。
应改为:
vector<int> foo() { // Compliant
return { 1, 2, 3 };
}
这样便可以利用移动赋值等机制提高效率。
对于遵循 C++11 之前标准的代码,也不应返回常量对象,函数返回的对象本来就需要通过常量引用或传值的方式被后续代码使用,将返回值设为常量的意义不大。