Обычные постоянные переменные в переполнении стека

Обычные постоянные переменные в C ++ по умолчанию имеют внутреннюю связь.
Предположим, если у меня есть следующее:

  • Я определяю переменную const в заголовочном файле (const int var = 2)

  • Затем я включаю заголовок в два файла cpp.

Если я пытаюсь получить адрес этой переменной const (т.е. &var) в обоих файлах cpp, будут ли эти два адреса одинаковыми? Также мне нужен небольшой рабочий код, чтобы проверить этот факт.

Я должен был отправить это как вопрос, потому что я не мог задать это там в комментариях к этот ответ дано в этой теме как новичок.

9

Решение

За C++ это не будет то же самое из-за внутренней связи — это 2 разных объекта.
В C это наоборот и const будет иметь внешнюю связь, поэтому вы получите ошибку связи из-за переопределения.

5

Другие решения

тогда эти два адреса будут одинаковыми?

Нет. Поскольку заголовки включаются в файлы * .cpp во время компиляции, поэтому каждый * .cpp, содержащий ваш заголовок, будет создавать свою собственную константу.

Однако, если вы используете extern const int var; в заголовке и установите значение по умолчанию в * .cpp, они должны быть одинаковыми.

2

Переменные будут иметь разные адреса. Также возможно, что если вы нигде не будете ссылаться на адрес переменной, переменная будет заменена его значением во время компиляции, а в двоичном файле вы вообще не найдете значение переменной.

0
По вопросам рекламы [email protected]