Простые постоянные переменные в C++

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

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

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

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

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

3 ответа

Решение

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

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

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

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

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

Другие вопросы по тегам