Создает ли переменная const в заголовке несколько локальных символов, таких как static? - PullRequest
0 голосов
/ 29 сентября 2019

Существует множество ответов относительно SO относительно переменных, объявленных в заголовке как const, static или extern.

Но я не понимаю, является ли переменная const в заголовке, котораяимеет внутреннюю связь, означает ли это, что эта переменная будет занимать пространство памяти в исполняемом эквиваленте для нескольких единиц перевода, в которые была включена переменная?

Например, рассмотрим это (комментарии - мое понимание, пожалуйста, исправьте, если неправильно):

header.h

static int var1 = 1; // each TU has it's own copy, consumes extra memory for each inclusion
const int var2 = 2; // same as above, exe consumes memory multiple of TU inclusions
extern int var3; // variable is unique, consumes memory only in a single place.

Насколько я понимаю, static и const одинаковы, оба имеют внутреннюю связь, есть несколько копий, за исключением того, что constне может быть изменено.

В основном, в чем разница между const и static в отношении потребления памяти, и в этом случае TU будет (или не будет) иметь несколько копий этих переменных?

ОБНОВЛЕНИЕ

Я также видел такие объявления:

const static int x = 0;

, если и static, и const подразумевают внутреннюю связь, в чем смыслвыше декларации тогда? почему бы просто не использовать:

const int x = 0;

это одно и то же? или есть разница?

...