C/С++ Цель статической константной локальной переменной
В C и С++, в чем преимущество создания локальной переменной const
static
? Предполагая, что инициализация не использует другие переменные, существует ли разница между сохранением значения между вызовами и установкой одинакового постоянного значения для каждого вызова?
Может ли действительный компилятор C игнорировать static
?
В С++ он избегает построения/уничтожения между вызовами, но может ли быть какая-то другая польза?
Ответы
Ответ 1
Это не займет место стека, может быть полезно, если у вас есть что-то вроде:
static const double table[fairly_large_number] = { .... };
Очевидно, что затраты на строительство также могут быть достаточно существенными, если функция называется много, есть хорошее значение только при создании объекта один раз.
Ответ 2
Да, и это огромно: преимущество семантического.
Когда вы помещаете const
, вы не просто означаете, что компилятор не должен позволять вам изменять переменную. Вы делаете более смелое выражение тому, кто читает код позже: это никогда не изменится. Даже не побочным эффектом, когда вы указываете эту переменную как указатель на другую функцию.
Кроме того, компилятор может воспользоваться этой новой информацией и оптимизировать ее в некоторых ситуациях, в зависимости от конкретного типа, с которым вы имеете дело.
(чтобы быть ясным, я говорю здесь о const
vs. non-const
, а не static
vs. non-static
.)
Изменить: Этот ответ "SO" также очень информативен.