Ответ 1
Нет - в С++ классы вложенности влияют только на имена и видимость, а не на семантику самого класса. Что касается сгенерированного кода, вложенный класс ничем не отличается от вложенного кода.
Все, что изменилось, - это видимость и имя (например, если она находится в разделе private:
внешнего класса, она не видна внешнему миру, а если она находится в разделе public:
, она видна, но ( конечно), чтобы назвать его, вы используете outer_class::inner_class
. Это все еще совершенно отдельный класс - просто, например, вы можете создать экземпляр внутреннего класса без создания какого-либо экземпляра внешнего класса.
Изменить: Извините, я пропустил часть вашего вопроса. В С++ 0x внутренний класс имеет доступ к частным частям внешнего класса - по сути, он, как если бы внешний класс объявлял внутренний класс своим другом, поэтому частные имена видны, но вам все равно нужно передайте ему нечто вроде ссылки на объект внешнего класса, прежде чем он сможет вызывать любые нестатические функции-члены внешнего класса.
Хотя это еще не так, я считаю, что большинство компиляторов уже используют эту часть.