Форум » C/C++ » Изменения в новом стандарте относительно вложенных классов. » Ответить

Изменения в новом стандарте относительно вложенных классов.

Сыроежка: Сейчас просматривал раздел нового стандарта С++ 2011, описывающий вложенные классы, и обнаружил такое интересное отличие от предыдущего стандарта. В параграфе #1 приводится пример корректного обращения во вложенном классе к членам, объявленным в во внешнем классе. Для простоты я сокращу пример до минимума [pre2]class enclose { public: int x; class inner { void f( int i ) { int a = sizeof( x ); // Смотри ниже комментарий } }; };[/pre2] Так, вот, в стандарте С++ 2003 напротив помеченной мной строки имеется комментарий // error: refers to enclose::x, то есть во вложенном классе нельзя ссылаться на не статические члены внешнего класса. Теперь, в новом стандарте С++ 2011 напротив этой строки уже другой комментарий: // OK: operand of sizeof is an unevaluated operand Вот теперь будет путаница у программистов! Кто-то увидет подобный код и категорично заявит, что это - ошибка. А кто-то другой скажет, что это совершенно корректный код. И будут спорить до посинения!:) Вообще-то, период перехода от одного стандарта к другому порой создает серьезные проблемы!

Ответов - 1

Сыроежка: Решил проверить, а как ведет себя MS VC++ 2010 по отношению к описанному изменению стандарта. Увы, здесь MS VC++ 2010 следует положениям старого стандарта, то есть стандарта С++ 2003, и приведенный выше пример не компилируется. То есть выдается сообщение об ошибке для оператора sizeof, говорящее о том, что нельзя использовать не статические члены внешнего класса.



полная версия страницы