Я знаю, что static const int x = 42;
в области пространства имен эквивалентно const int x = 42;
, потому что переменные const
неявно static
(они должны быть объявлены extern
для внешней привязки). Каждая единица перевода, включающая это объявление, получает локальную копию x
.
Это относится только к определенным (возможно, целым?) типам? У меня есть следующий код в файле заголовка:
namespace XXX {
static const char* A = "A";
static const char* B = "B";
static const char* C = "C"; // and so on
}
(ПОЖАЛУЙСТА, напишите мне, почему я не должен использовать строки стиля C - это устаревший код)
Этот заголовок включен из нескольких исходных файлов, и все в порядке (каждый блок компиляции получает свою собственную копию этих char*
). Я бы подумал, что я могу удалить static
из них, поскольку он избыточен, но когда я это делаю, я получаю ошибки ссылок о символах, которые уже определены в другом объекте. Что мне здесь не хватает? Являются ли эти const char*
не неявно статическими?