Почему "статический" необходим для глобального const char, но не для bool?
Общий заголовок.
Я могу это сделать:
const bool kActivatePlayground=false;
Прекрасно работает при включении нескольких файлов.
Я не могу этого сделать:
const char * kActivePlayground = "kiddiePool";
Результаты с ошибкой: дубликаты символов.
Но это работает:
static const char * kActivePlayground = "kiddiePool";
Почему static
необходим для const char *
, но не для const bool
? Кроме того, я думал, что static
не требуется, так как const
всегда static
implicity?
Ответы
Ответ 1
В С++ переменные const
по умолчанию имеют статическую связь, а переменные non const
имеют внешнюю связь.
Причиной ошибки нескольких определений является то, что
const char * kActivePlayground = "kiddiePool";
создает переменную с внешней связью.
Эй, подождите, разве я не говорю, что переменные const
по умолчанию статичны? Да. Но kActivePlayground
не const
. Это указатель не const
на const char
.
Это будет работать так, как вы ожидаете:
const char * const kActivePlayground = "kiddiePool";
Ответ 2
Вы можете использовать постоянный массив char
const char kActivePlayground[] = "kiddiePool";
и kActivePlayground также могут использоваться для назначения, поскольку это ссылка
const char* playground_text = kActivePlayground;