On-line: гостей 0. Всего: 0 [подробнее..]
Программисты всех стран, объединяйтесь!

АвторСообщение



ссылка на сообщение  Отправлено: 28.07.12 16:56. Заголовок: Уточнение к 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 
ПрофильЦитата Ответить
Новых ответов нет


Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 0
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет