б 78________________________________Часть IV. Новые возможности С++
Как легко видеть, это код листинга 24.5, за исключением того, что каждое объявление из пространства simple сопровождается уточняющим префиксом Simple::.
Вложенные пространства имен
Пространства имен — действительно глобальные конструкции. Их нельзя объявить внутри тел функций, шаблонов, классов и т. п. Однако их можно вкладывать друг в друга. Вложенные пространства имен подчиняются обычным правилам видимости для C++: они имеют доступ ко всем определениям и объявлениям, сделанным в пространствах-родителях. Родительские пространства не имеют доступа к определениям своих детей. Фрагмент кода из листинга 24.7 иллюстрирует эти принципы."
ttinclude <iostream.h>
namespace Outer {
long Dog = 123;
long Cat = 456;
namespace Inner (
long Lizard = Dog;
// Или как вариант
// long Cat = Outer::Dog;
// Сокрытие Cat из Outer long Cat = 789;
// Выведем их всех по порядку
void AFunc()
(
cout « "Cat: " « Cat « "\n"; // Это Inner::Cat cout « "Inner Cat: " « Inner::Cat « "\n";
cout « "Outer Cat: " « Outer::Cat « "\n";
} } )
void main() {
// Ошибка — AFunc() недоступна в Outer
// Outer::AFunc() ;
// Ошибка — Inner недоступна в main() // Inner::AFunc();