Re[3]: const - когда быть, когда не быть
От: Аноним  
Дата: 23.04.03 14:15
Оценка: 12 (3) +1
Здравствуйте, Дмитро, Вы писали:

[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++?

Удалено избыточное цитирование. -- ПК.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.