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




.Локальные классы * - часть 2


void foo( int val )

{

   static int si;

   enum Loc { a = 1024, b };

   class Bar {

   public:

      Loc locVal;   // правильно

      int barVal;

      void fooBar ( Loc l = a ) {  // правильно: Loc::a

         barVal = val;       // ошибка: локальный объект

         barVal = ::val;     // правильно: глобальный объект

         barVal = si;        // правильно: статический локальный объект

         locVal = b;         // правильно: элемент перечисления

      }

   };

   // ...

}

Имена в теле локального класса разрешаются лексически путем поиска в объемлющих областях видимости объявлений, предшествующих определению такого класса. При разрешении имен, встречающихся в телах его функций-членов, сначала просматривается область видимости класса, а только потом – объемлющие области,

Как всегда, если первое найденное объявление таково, что употребление имени оказывается некорректным, поиск других объявлений не производится. Несмотря на то что использование val в fooBar() выше является ошибкой, глобальная переменная val не будет найдена, если только ее имени не предшествует оператор разрешения глобальной области видимости.




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