С++ для начинающих



требования europa universalis iv: el dorado

Вложенные пространства имен - часть 2


}

Вложенное пространство имен является вложенной областью видимости внутри пространства, содержащего его. В процессе разрешения имен вложенные пространства ведут себя так же, как вложенные блоки. Когда некоторое имя употребляется в пространстве имен, поиск его объявление проводится во всех объемлющих пространствах. В следующем примере разрешение имени Type происходит в таком порядке: сначала ищем его в пространстве имен Ma­trixLib, затем в cplusplus_primer и наконец в глобальной области видимости:

typedef double Type;

namespace cplusplus_primer {

    typedef int Type; // скрывает ::Type

    namespace MatrixLib {

        int val;

        // Type: объявление найдено в cplusplus_primer

        int func(Type t) {

            double val; // скрывает MatrixLib::val

            val = ...;

        }

        // ...

    }

}

Если некоторая сущность объявляется во вложенном пространстве имен, она скрывает объявление одноименной сущности из объемлющего пространства.

В предыдущем примере имя Type из глобальной области видимости скрыто объявлением Type в пространстве cplusplus_primer. При разрешении имени Type, упоминаемого в Ma­trixLib, оно будет найдено в cplusplus_primer, поэтому у функции func() параметр имеет тип int.

Аналогично сущность, объявленная в пространстве имен, скрывается одноименной сущностью из вложенной локальной области видимости. В предыдущем примере имя val из Ma­trixLib скрыто новым объявлением val. При разрешении имени val внутри func() будет найдено его объявление в локальной области видимости, и потому присваивание в func() относится именно к локальной переменной.




Содержание  Назад  Вперед