Возможный дубликат:
Должен ли я возвращать объекты const?(Первоначальное название этого вопроса: int foo() или const int foo()?, объясняя, почему я его пропустил.)
Эффективный С++, пункт 3: Используйте константу, когда это возможно. В частности, рекомендуется возвращать объекты-константы, чтобы избежать непреднамеренного присваивания, например if (a*b = c) {
. Я нахожу его немного параноидальным, тем не менее я слежу за этим советом.
Мне кажется, что возвращающие объекты const могут ухудшить производительность в С++ 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
Правильно ли выполняю назначение переноса? Или я просто не должен возвращать объекты const больше в С++ 11?