Являются ли локальный класс, внутренний класс и вложенный класс одним и тем же в C++?

Локальный класс, внутренний класс и вложенный класс означают одно и то же в C++?

3 ответа

Решение

Локальный класс и Вложенный класс - разные звери.

Вложенный класс - это класс, объявленный в области действия другого класса.

Локальный класс объявлен в определении функции.

Внутренний класс - это нестандартный термин C++, поэтому я не уверен, как его определить.


Вложенные классы:

Документация IBM как хорошая документация здесь.
Подвести итоги:

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

Местные классы:
Этот мой ответ здесь документирует тонкие моменты, связанные с местными классами.

Цитировать черновик C++ 11 (N3290):

9.7 Вложенные объявления классов [class.nest]

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

9.8 Локальные объявления классов [class.local]

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

В стандарте C++ отсутствует понятие внутреннего класса.

Внутренние классы захватывают вмещающий класс this ссылка. Иерархия экземпляров внутреннего класса образует древовидную структуру. Это уникально для Java.

Другие вопросы по тегам