| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Неименнованые пространства имен |
| Автор: Graf_h 26.5.2009, 14:43 |
| Здравствуйте, помогите разобратся. В чем смисл использования неименнованых пространств имен?? |
| Автор: mes 26.5.2009, 15:02 |
| тут есть частичный (однако, полагаю, достаточный) разбор этой темы : http://forum.vingrad.ru/forum/topic-258558/kw-namespace-class-using.html |
| Автор: Alek86 26.5.2009, 16:12 |
| безымянный неймспейс безымянен только для программиста и компилятора перед линковкой подставляется рандомное и уникальное имя потому есть гарантия, что линковщик не будет ругаться, если увидит 2 extern объекта ("глобальные" переменные, "глобальные" функции) с одинаковым имемнем но каждый в своем безымянном неймспейсе |
| Автор: andrew_121 26.5.2009, 18:06 | ||
По подробней пожалуйста.... |
| Автор: zim22 26.5.2009, 18:26 | ||||||
попробуйте обратиться к переменной a и функции fcn используя анонимное пространство имён, а не my_namespace. не получится. т.к. область видимости anonymous namespace - файл, в котором оно определено. 2.h
2.cpp
main.cpp
|
| Автор: andrew_121 26.5.2009, 19:47 |
| zim22, Преогромное спасибо! Познавательно! |
| Автор: Graf_h 27.5.2009, 10:19 | ||||
тоесть, это просто саособ избежать внешнего связывания? Если ми используем анонимные пространства т это будет примерно так?
В итоге при компоновке будет:
|
| Автор: zim22 27.5.2009, 10:27 | ||
Стандарт. 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 27.5.2009, 11:27 |
| zim22, спасибо |