Являются ли локальный класс, внутренний класс и вложенный класс одним и тем же в C ++? - PullRequest
5 голосов
/ 24 октября 2011

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

Ответы [ 3 ]

5 голосов
/ 24 октября 2011

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

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

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

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


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

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

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

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

2 голосов
/ 24 октября 2011

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

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

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

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

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

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

0 голосов
/ 24 октября 2011

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

...