Подтвердить что ты не робот

В чем разница между static const и const?

Возможный дубликат:
Const vs Static Const

В чем разница между static const и const? Например:

static const int a=5;
const int i=5;

Есть ли разница между ними? Когда вы будете использовать один над другим?

4b9b3361

Ответ 1

Разница заключается в связи.

// At file scope
static const int a=5;  // internal linkage
const int i=5;         // external linkage

Если объект i не используется вне единицы перевода, где он определен, вы должны объявить его с помощью спецификатора static.

Это позволяет компилятору (потенциально) выполнять дальнейшие оптимизации и информирует читателя о том, что объект не используется вне его единицы перевода.

Ответ 2

static определяет видимость вне функции или продолжительность жизни переменных внутри. Таким образом, это не имеет никакого отношения к const per se.

const означает, что вы не изменяете значение после его инициализации.

static внутри функции означает, что переменная будет существовать до и после завершения функции.

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

Технически (если вы хотите посмотреть это), static - спецификатор хранилища, а const - спецификатор типа.

Ответ 3

Это зависит от того, находятся ли эти определения внутри функции или нет. Ответ на случай, выходящий за пределы функции, указан выше. Внутри функции эффект различен, как показано на следующем примере:

#include <stdlib.h>

void my_function() {
  const int foo = rand();         // Perfectly OK!
  static const int bar = rand();  // Compile time error.
}

Если вы хотите, чтобы локальная переменная была "действительно постоянной", вы должны определить ее не только "const", но и "static const".