Форум » C/C++ » Уточнение к typedef спецификатору. » Ответить

Уточнение к typedef спецификатору.

Сыроежка: Как известно,недавно вышел новый стандарт языка С++ - С++ 2011. Хорошо это или плохо? Естественно это усложняет жизнь программистам, так как 1) теперь надо штудировать новый стандарт и знать, чем он отличается от предыдущего, принятого в 2003 году: 2) возникает путаница с компиляторами, так как какие-то компиляторы вообще пока не поддерживают новый стандарт, какие-то поддерживают частично, а какие-то заявляют, что, якобы, поддерживают новый стандарт, но при этом вносят новые баги в свои компиляторы. То есть жизнь программистов усложняется. В связи с этим меня удивили радостные возгласы о принятии нового стандарта по С++ на одном форуме.именно тех программистов, которые текущий стандарт совершенно не знали и в жизни его не читали! Эта та категория людей, из которых обычно образуется толпа. Тот же кто привык мыслить самостоятельно и не подвержен стадному инстинкту осознал, что ему предстоит большая работа по освоению нового стандарта. Но есть и положительные стороны в принятии новых стандартов. Обычно в новых стандартах уточняются формулировки, которые были двусмыленны в старых стандартах, даются новые пояснения, примеры и дополнительный материал, позволяющий лучше понять старый стандарт. И одно из таких уточнений касается спецификатора typedef. В стандарте С++ 2003 года был такой пункт 7,1.3 The typedef dpecifier пункт 2: "In a given non-class scope, a typedef specifier can be used to redefine the name of any type declared in that scope to refer to the type to which it already refers." В этом пункте смущало присутствие слов non-class scope Сразу же возникал вопрос, а если имеем class scope, то что тогда? Почему подчеркивается,что положение этого пункта касается только non-class scope? Увы,ответа на этот вопрос вэтом разделе 7.1.3 не было. Теперьвновом стандарте появился новый пункт,который восполняет этот пробел. Я процитирую эти два пункта (предыдущий, мною процитированный, и новый дополненный) вместе 3 In a given non-class scope, a typedef specifier can be used to redefine the name of any type declared in that scope to refer to the type to which it already refers. [ Example: typedef struct s { / ... / } s; typedef int I; typedef int I; typedef I I; —end example ] 4 In a given class scope, a typedef specifier can be used to redefine any class-name declared in that scope that is not also a typedef-name to refer to the type to which it already refers. [ Example: struct S { typedef struct A { } A; // OK typedef struct B B; // OK typedef A A; // error }; —end example ] То есть внутри класса typedef не может переопределять имя, которое уже является typedef именем. Вот, так, читая новый стандарт, можно освоить старынй стандарт С++!:)

Ответов - 0



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