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?

questionAnswers(3)

yourAnswerToTheQuestion