Это открытый вопрос. Эффективный С++. Пункт 3. Использовать константу, когда это возможно. Действительно?
Я хотел бы сделать все, что не меняется во время жизни const. Но состретется со своими собственными проблемами. Если класс имеет какой-либо константный член, оператор сгенерированного оператора компилятора отключается. Без оператора присваивания класс не будет работать с STL. Если вы хотите предоставить свой собственный оператор присваивания, требуется const_cast. Это означает больше шума и больше места для ошибок. Как часто вы используете члены класса const?
РЕДАКТИРОВАТЬ: Как правило, я стремлюсь к константной корректности, потому что много многопоточности. Мне редко приходится реализовывать контроль копирования для моих классов и никогда не удалять код (если это абсолютно необходимо). Я чувствую, что текущее состояние дел с const противоречит моему стилю кодирования. Const заставляет меня реализовать оператор присваивания, хотя он мне не нужен. Даже без const_cast назначение - это хлопот. Вы должны убедиться, что все члены const сравниваются с равными, а затем вручную копируют все неконстантные элементы.
Код. Надеюсь, что это прояснит, что я имею в виду. Класс, который вы видите ниже, не будет работать с STL. Вам нужно реализовать для него назначение, даже если оно вам не нужно.
class Multiply {
public:
Multiply(double coef) : coef_(coef) {}
double operator()(double x) const {
return coef_*x;
}
private:
const double coef_;
};