logo
volkov / C++ / Бьерн Страуструп-Справочное руководство по С++

R.9.8 Описания локальных классов

Класс можно описать в определении функции, такой класс называется

локальным. Имя локального класса считается локальным в объемлющей

области видимости, а областью видимости локального класса является

объемлющая область видимости. В описаниях локального класса из

объемлющей области видимости можно использовать только имена типов,

статических переменных, внешних переменных и функций, а также

элементы перечисления. Приведем пример:

int x;

void f()

{

static int s;

int x;

extern int g();

struct local {

int h() { return x; } // ошибка: `x' автоматическая

int j() { return s; } // нормально

int k() { return ::x; } // нормально

int l() { return g(); } // нормально

}

}

Объемлющая функция не имеет особых прав доступа к членам локального

класса, она подчиняется обычным правилам доступа ($$R.11).

Функцию-член локального класса следует определять в определении этого

класса. Локальный класс не может иметь статических членов,

представляющих данные.