Czy nadal powinienem zwracać obiekty const w C ++ 11? [duplikować]
Możliwy duplikat:
Czy powinienem zwracać obiekty const?
(Oryginalny tytuł tego pytania brzmiał:int foo () lub const int foo ()? wyjaśniając, dlaczego to przegapiłem.)
Efektywny C ++, element 3: używaj const, gdy tylko jest to możliwe. Zwłaszcza promowane jest zwracanie obiektów const, aby uniknąć niezamierzonego przypisaniaif (a*b = c) {
. Uważam to za trochę paranoiczne, niemniej jednak przestrzegałem tej rady.
Wydaje mi się, że zwracanie obiektów const może obniżyć wydajność w 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;
}
To drukuje:
copy
move
Czy prawidłowo realizuję zadanie przeniesienia? Lub po prostu nie powinienem już zwracać obiektów const w C ++ 11?