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

Почему "статический" необходим для глобального 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?

4b9b3361

Ответ 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;