![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Graf_h |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 482 Регистрация: 18.10.2007 Где: г. Ровно, Украина Репутация: 2 Всего: 5 |
Здравствуйте, помогите разобратся. В чем смисл использования неименнованых пространств имен??
-------------------- Иногда переменная - это просто переменная |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
тут есть частичный (однако, полагаю, достаточный) разбор этой темы : http://forum.vingrad.ru/forum/topic-258558...lass-using.html
Это сообщение отредактировал(а) mes - 26.5.2009, 15:04 |
|||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
безымянный неймспейс безымянен только для программиста и компилятора
перед линковкой подставляется рандомное и уникальное имя потому есть гарантия, что линковщик не будет ругаться, если увидит 2 extern объекта ("глобальные" переменные, "глобальные" функции) с одинаковым имемнем но каждый в своем безымянном неймспейсе Это сообщение отредактировал(а) Alek86 - 26.5.2009, 16:13 |
|||
|
||||
| zim22 |
|
||||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 24 Всего: 69 |
Цитата из книги С++ Common Knowledge (Stephen Dewherst): Использование анонимных простанств имён - самый передовой способ избежать объявления статически связанных функций и переменных.
В приведённом выше коде переменная и функцию имеют внешнее связывание, но доступ к ним может быть осуществлен только в рамках единицы трансляции (т.е. в полученном после предварительной обработке файле), в которой они находятся, точно так же, как к статическим переменным. |
||||
|
|||||
| andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 6 Всего: 33 |
По подробней пожалуйста.... -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
| zim22 |
|
||||||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 24 Всего: 69 |
попробуйте обратиться к переменной a и функции fcn используя анонимное пространство имён, а не my_namespace. не получится. т.к. область видимости anonymous namespace - файл, в котором оно определено. 2.h
2.cpp
main.cpp
|
||||||
|
|||||||
| andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 6 Всего: 33 |
zim22, Преогромное спасибо! Познавательно!
-------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
| Graf_h |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 482 Регистрация: 18.10.2007 Где: г. Ровно, Украина Репутация: 2 Всего: 5 |
тоесть, это просто саособ избежать внешнего связывания? Если ми используем анонимные пространства т это будет примерно так?
В итоге при компоновке будет:
-------------------- Иногда переменная - это просто переменная |
||||
|
|||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 24 Всего: 69 |
Стандарт. 7.3.1.1 Unnamed namespaces An unnamed-namespace-definition behaves as if it were replaced by
where all occurrences of unique in a translation unit are replaced by the same identifier and this identifier differs from all other identifiers in the entire program. ... The use of the static keyword is deprecated when declaring objects in a namespace scope the unnamed-namespace provides a superior alternative. ... Although entities in an unnamed namespace might have external linkage, they are effectively qualified by a name unique to their translation unit and therefore can never be seen from any other translation unit. |
|||
|
||||
| Graf_h |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 482 Регистрация: 18.10.2007 Где: г. Ровно, Украина Репутация: 2 Всего: 5 |
zim22, спасибо
-------------------- Иногда переменная - это просто переменная |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |