Каково определение константной корректности?

Я думал, что понятие «константная корректность» было довольно хорошо определено, но когда я говорил об этом с другими людьми, казалось, что у нас были разные представления о том, что это значит. Некоторые говорят, что это программа, имеющая аннотации "const" в максимально возможном количестве мест. Другие определяют программу как константно-правильную тогда и только тогда, когда нет нарушений константности там, где используется константная аннотация (т. Е. Это свойство, которое компилятор проверяет за вас).

Итак, я хотел бы знать, какие из этих функций являются правильными:

struct Person {
    string getName1() const { return _name; }
    string getName2() { return _name; }
    string getName3() const { _name = "John"; return _name; }
    string getName4() { _name = "John"; return _name; }

    string _name;
};

Я искал в Интернете определения, но не смог найти точного ответа, и у меня также есть подозрения, что может быть случай цитогенеза в игре. Так может ли кто-нибудь дать сколько-нибудь убедительную ссылку на определение?

5
задан exclipy 26 November 2011 в 10:29
поделиться