Здравствуйте, Дмитро, Вы писали:
[skip]
Д>На самом-то деле вопрос гораздо сложнее, чем кажется. Бездумное использование этого модификатора (всовывание его всюду, где только можно), способно создать немало неприятностей.
Бездумное программирование вообще создаёт много неприятностей
Д>Пример. Допустим, у нас есть некий класс A, от которого в принцие можно наследоваться (т.е. не final и не sealed), с методом doSomething. Реализация этого метода в этом же классе не меняет члены данных. Стоит ли объявить ее const? Предположим, мы так и сделали.
Д>Д>class A {
Д>private:
Д> int i;
Д>public:
Д> virtual void doSomething() const {
Д> printf("%d\n", i);
Д> }
Д>};
Д>
Д>Пока все замечательно.
Напротив, очень даже странно, функция doSomething() ни входных, ни выходных параметров не имеет, возвращаемого значения тоже нет и объект не меняет. Что же она должна делать? (Только писать в std::cout "Hello world!"?!

)
Короче "const" тут сразу под большим вопросом.
Д>Далее пишется отпределенное количество кода, ... В общем, хорошо.
Д>И вдруг, нам понадобилось создать класс B унаследованный от A и переопределить в нем doSomething. И тут оказывается, что B::doSomething меняет члены данных класса B, поэтому не может быть константным!
А мне кажется странным, что у нескольких классов до этого функция
doSomething была константной, а у нового класса эта функция оказывается неконстантной. Может быть новый класс делает в
doSomething чего не должен делать? А может...
Д>Поэтому, я считаю, что если есть хоть какое-то сомнение в необходимости constа, что лучше его не использовать.
Не формализируемо, а посему неприменимо
Д>Исходя из своего опыта, могу сказать, что в большинстве случаев: <...>
P.S. Есть книги, которые посвящены подобным вопросам. ("Что и когда стоит или не стоит использовать в C++") Может стоит заглянуть в раздел сайта посвященным книгам по C++?
Удалено избыточное цитирование. -- ПК.