Обычные постоянные переменные в C ++ по умолчанию имеют внутреннюю связь.
Предположим, если у меня есть следующее:
Я определяю переменную const в заголовочном файле (const int var = 2
)
Затем я включаю заголовок в два файла cpp.
Если я пытаюсь получить адрес этой переменной const (т.е. &var
) в обоих файлах cpp, будут ли эти два адреса одинаковыми? Также мне нужен небольшой рабочий код, чтобы проверить этот факт.
Я должен был отправить это как вопрос, потому что я не мог задать это там в комментариях к этот ответ дано в этой теме как новичок.
За C++
это не будет то же самое из-за внутренней связи — это 2 разных объекта.
В C
это наоборот и const
будет иметь внешнюю связь, поэтому вы получите ошибку связи из-за переопределения.
тогда эти два адреса будут одинаковыми?
Нет. Поскольку заголовки включаются в файлы * .cpp во время компиляции, поэтому каждый * .cpp, содержащий ваш заголовок, будет создавать свою собственную константу.
Однако, если вы используете extern const int var;
в заголовке и установите значение по умолчанию в * .cpp, они должны быть одинаковыми.
Переменные будут иметь разные адреса. Также возможно, что если вы нигде не будете ссылаться на адрес переменной, переменная будет заменена его значением во время компиляции, а в двоичном файле вы вообще не найдете значение переменной.