Страницы

Поиск по вопросам

вторник, 2 октября 2018 г.

Зачем нужно неименованное пространство имен?

какую пользу можно извлечь из подобной конструкции:
namespace{ int i; }


Ответ

Польза та же, что и при использовании ключевого слова static — избегание проблем с ODR(one definition rule). Если, к примеру, в заголовке у Вас будет int i;, тогда при подключении в 2 и более .cpp файла Вы получите ошибку линоквки — один и тот же символ определён дважды. Если же Вы напишете static int i;, то i станет локальным для каждого объектного файла в который i попадает — т.е. в каждом cpp будет свой i, в отличии от первого вариант, где i один на всю программу. То же самое происходит когда Вы пишите
namespace{ int i; }
i получает внутреннее связывание и, следовательно, проблемы с ODR не будет.

Комментариев нет:

Отправить комментарий