Как часто Вы объявляете, что Ваши функции константа?

Вы находите это полезным?

15
задан Peter Alexander 10 March 2010 в 13:01
поделиться

7 ответов

Каждый раз, когда вы знаете, что этот метод выигрывал Чтобы не изменять состояние объекта, вы должны объявить его постоянным.

Это помогает читать ваш код. И это помогает, когда вы пытаетесь изменить состояние объекта - компилятор вас остановит.

24
ответ дан 1 December 2019 в 00:29
поделиться

Я использую const почти при каждой возможности, и мне нравится тот факт, что она не только документирует намерение, но и обеспечивает его соблюдение. Возможности языка не могут быть лучше этого, и все же const, как ни странно, не любят. (На самом деле кажется, что большинство самопровозглашенных программистов C ++ не могут объяснить разницу между int *, int * const, const int * и const int * const . )

Хотя этого никогда не могло бы произойти из-за происхождения 'C', я часто думаю, что C ++ был бы лучшим языком, если бы по умолчанию был const и было бы необходимо либеральное добавление (скажем) 'var' или другого подобного ключевого слова чтобы разрешить изменение переменных после построения.

1
ответ дан 1 December 2019 в 00:29
поделиться

Раньше я объявляю функции как const, но теперь я редко, если вообще когда-либо, делаю это.

Основная проблема заключалась в том, что если бы я хотел изменить функцию с константы на неконстантную, это означало бы, что все другие константные функции, вызывающие эту функцию, также нужно было бы изменить на неконстантные.

Это происходило чаще, чем я думал, из-за оптимизации. Например, у меня была функция GetData (), которая использовалась для возврата указателя на данные, но позже я оптимизировал ее, чтобы настроить данные только в том случае, если GetData () заканчивается вызовом (который изменяет состояние объекта, поэтому он больше не является константой). функция).

То же самое и для других функций, которые могли выполнять некоторые вычисления без изменения состояния объекта, но в какой-то момент кэширование результата имело больше смысла, поскольку функция вызывалась много раз и была узким местом.

Также на практике, по крайней мере для моего проекта, я увидел очень мало пользы от объявления моих функций как const.

0
ответ дан 1 December 2019 в 00:29
поделиться

Предположим, вы говорите о методах, например:

struct Example {
  void f() const;
};

Тогда, если они должны быть вызваны для объекта const, метод должен быть const.

3
ответ дан 1 December 2019 в 00:29
поделиться

Когда у вас есть объект const , компилятор позволит вам вызывать только те методы, которые помечены как безопасные с помощью ключевого слова const . Фактически, только методы-члены имеют смысл как const методы.

В C ++ каждый метод объекта получает неявный this указатель на объект; Метод const просто получит указатель const this .

6
ответ дан 1 December 2019 в 00:29
поделиться

Нечасто ....

Хотя все ответы верны, если вы используете библиотеку, которая не const правильная , тогда трудно использовать const во всех местах, где вы должны использовать Это.

Если у вас есть старый API, который принимает char * , который для всех логических целей должен быть const char * , то вам нужно либо забыть const в своем коде, либо выполнить какой-то некрасивый кастинг. В этом случае я забываю const.

2
ответ дан 1 December 2019 в 00:29
поделиться

Как можно чаще. Функции, которым не нужно изменять члены данных, должны быть объявлены как const. Это делает код более понятным и может дать подсказку компилятору для оптимизации.

11
ответ дан 1 December 2019 в 00:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: