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