Здравствуйте, гость ( Вход | Регистрация )
Tonal | Дата 5.5.2010, 8:07 |
Про оптимизацию недавно обсуждали здесь. А по сути я с Iron Bug согласен - указание const-ов усиливает типизацию. Соответственно компилятор может помочь избежать ошибок в большем числе случаев. |
|
Iron Bug | Дата 4.5.2010, 18:02 |
А если метод не помечен как константный, то компиллер будет ругаться. ну, совершенно справедливо ругаться будет. ибо для константного объекта можно вызывать только константные методы, соответственно. на то и сделан квалификатор const. иначе не будет выполняться условие константности. умозрительно, можно рассматривать квалификатор const как другой тип. |
|
Litkevich Yuriy | Дата 4.5.2010, 17:50 |
по сути, разные типы аргументов угу. я тут с ними вошкался намедни.Если функция помечена как const это ещё не значит что она не изменяет объект. Просто компиллер так будет думать. Например: если метод mthod() помечен как константный, то его можно вызвать в этой функции. Т.к. объект передаётся по константной ссылке. А если метод не помечен как константный, то компиллер будет ругаться. Можно, конечно взять и пометить. Но хорошенько не подумав так лучше не делать. Т.к. компиллер тебе уже будет не помощник (ему не на что будет ругаться в других ситуациях) |
|
Iron Bug | Дата 4.5.2010, 17:23 |
это обычная перегрузка методов класса. для компилятора константный объект класса и просто объект класса - по сути, разные типы аргументов. this неявно передаётся в любой метод класса. к константным объектам могут быть применены только константные методы. если ты не перегрузишь константный метод - то получишь ошибку компиляции - несоответствие квалификаторов. компилятор, конечно, пытается оптимизировать работу с константными объектами, но я не думаю, что это даст серьёзный прирост по производительности программы. в примере предполагается оптимизация логики методов для константных объектов со стороны программиста. |
|
kibsoft | Дата 4.5.2010, 16:46 |
Вообще const в методах нужен только для запрета изменения данных?: void func()const;//тут нельзя изменять все, что не mutable void fucn(const A *obj);//нельзя изменять объект A. Вот прочитал на хабре: Цитата Кроме того, этот const позволяет перегружать методы. Таким образом, вы можете писать оптимизированные варианты методов для константных объектов. Раскрывающийся текст
Результат: A(int) // x=1 f() // x=1 A(int) // x=2 f() const // x=2 То есть для константного объекта (с x=2) был вызван соответствующий метод. Оптимизированный в том смысле, что самому заботится не надо какой ты объект передаешь(const, не const) и компилятор сам выберет нужный метод? А вообще const в аргументах и т.д. хоть как-то влияет на скорость выполнения? P.S. Пока понимаю только один смысл - оберегание от случайных изменений данных. |
|
Просмотр темы полностью (откроется в новом окне) | |
Текстовая версия | Сейчас: 29.3.2024, 12:24 |