Я знаю, что 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* не неявно статическими?