Возможный дубликат:
Const vs Static Const
В чем разница между static const
и const
?
Например:
static const int a=5;
const int i=5;
Есть ли разница между ними? Когда вы будете использовать один над другим?
Возможный дубликат:
Const vs Static Const
В чем разница между static const
и const
?
Например:
static const int a=5;
const int i=5;
Есть ли разница между ними? Когда вы будете использовать один над другим?
Разница заключается в связи.
// At file scope
static const int a=5; // internal linkage
const int i=5; // external linkage
Если объект i
не используется вне единицы перевода, где он определен, вы должны объявить его с помощью спецификатора static
.
Это позволяет компилятору (потенциально) выполнять дальнейшие оптимизации и информирует читателя о том, что объект не используется вне его единицы перевода.
static определяет видимость вне функции или продолжительность жизни переменных внутри. Таким образом, это не имеет никакого отношения к const per se.
const означает, что вы не изменяете значение после его инициализации.
static внутри функции означает, что переменная будет существовать до и после завершения функции.
static вне функции означает, что область действия символа, помеченного static, ограничена этим .c файлом и не может быть замечена вне его.
Технически (если вы хотите посмотреть это), static - спецификатор хранилища, а const - спецификатор типа.
Это зависит от того, находятся ли эти определения внутри функции или нет. Ответ на случай, выходящий за пределы функции, указан выше. Внутри функции эффект различен, как показано на следующем примере:
#include <stdlib.h>
void my_function() {
const int foo = rand(); // Perfectly OK!
static const int bar = rand(); // Compile time error.
}
Если вы хотите, чтобы локальная переменная была "действительно постоянной", вы должны определить ее не только "const", но и "static const".