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" также очень информативен.