Пространство имен без имени сообщает компилятору, что ничто внутри не должно использоваться совместно с другим модулем перевода. (То есть все внутри имеет внутреннюю связь .) Пока SIZE
находится в безымянном пространстве имен , оно не может иметь внешнюю связь , поэтому оно невозможно увидеть от myFunction()
.
Если возможно, мне бы также хотелось, чтобы объяснение того, почему можно было бы делиться РАЗМЕРОМ таким образом.
Поскольку вы работаете с игрушечным упражнением, я предполагаю, что можно было бы разделить SIZE
таким образом, чтобы лучше понять внутреннюю и внешнюю связь. Это упражнение, а не пример из реальной жизни.
Для более реалистичного примера, возможно, строка версии будет и простой, и хорошей? Ваше приложение может иметь версию (например, «1.69.8109»), которая отображается в различных точках. Эта версия может быть объявлена как const string
, которая используется несколькими исходными файлами. Он вошел бы в (именованное) пространство имен, чтобы избежать конфликтов имен. Он может быть определен в исходном файле, а не в заголовочном файле, чтобы ограничить объем повторной компиляции, необходимый при изменении версии. (Необходимо перекомпилировать только источник с определением, а не каждый источник, использующий строку версии.) Это может быть разумным преимуществом, особенно если номер версии изменяется достаточно часто, а не обязательно только при подготовке нового выпуска.
(из комментариев):"Попробуйте заставить это работать. Вы можете дать безымянному пространству имен, содержащему SIZE, имя, если это поможет"
Забавно, как часто инструкции к упражнению говорят вам, что делать. (Хех, "если".)