Читаем C++ полностью

union (* список_членов *);

называется безымянным объединением; оно определяет неменованный объект. Имена членов безымянного объединения долны отличаться от других имен в области видимости, в которой объединение описано; в этой области видимости они могут ипользоваться непосредственно, без обычного синтаксиса доступа к членам (#8.5). Например:

union (* int a; char* p; *); a = 1; // ... p = «asdf»;

Здесь a и p используются как простые переменные (не-члны), но так как они являются членами объединения, они имеют один и тот же адрес.

<p>8.5.14 Поля бит</p>

Описатель_члена вида

идентификатор opt : константное_выражение

определяет поле; его длина отделяется от имени поля дветочием. Поля упаковываются в машинные целые; они не являются альтернативой слов. Поле , не влезающее в оставшееся в целом место, помещается в следующее слово. Поле не может быть шире слова. На некоторых машинах они размещаются справа налево, а на некоторых слева направо, см. #2.6.

Неименованные поля полезны при заполнении для согласовния внешне предписанных размещений (форматов). В особых слчаях неименованные поля длины 0 задают выравнивание следующго поля по границе слова. Не требуется аппаратной поддержки любых полей, кроме целых. Более того, даже целые поля могут рассматриваться как unsigned. По этим причинам рекомендуется описывать поля как unsigned. К полям не может применяться операция получения адреса amp;, поэтому нет указателей на поля.

Поля не могут быть членами объединения.

<p>8.5.15 Вложенные классы</p>

Класс может быть описан внутри другого класса. Это, онако, лишь соглашение о записи, поскольку внутренний класс принадлежит охватывающей области видимости. Например:

int x;

class enclose (* // охватывающий int x; class inner (* // внутренний int y; void f(int); *); int g(inner*); *);

inner a; void inner::f(int i) (* x = i; *) // присваивает ::x int enclose::g(inner* p) (* return p-»y; *) // ошибка

<p>8.6 Инициализация</p>

Описатель может задавать начальное значение описываемого идентификатора.

инициализатор: = выражение = (* список_инициализаторов , opt *) ( список_выражений ) список_инициализаторов: выражение список_инициализаторов , список_инициализаторов (* список_инициализаторов *)

Все выражения в инициализаторе статической или внешней переменной должны быть константными выражениями, которые опсаны в #12, или выражениями, которые сводятся к адресам ранее описанных переменных, возможно со смещением на константное выражение. Автоматические и регистровые переменные могут инциализироваться любыми выражениями, включащими константы, рнее описанные переменные и функции.

Гарантируется, что неинициализированные статические и внешние переменные получают в качестве начального значения 0. Гарантируется, что неинициализированные автоматические и ргистровые переменные получают в качестве начального значения «пустое место»*.

– * В английском – «garbage», означающее затертое место [памяти], т.е. если переменная целая, то 0, если char, то '\0', если указатель на Т, то (Т*) NULL. (прим. перев.)

Когда инициализатор применяется к скаляру (указатель или объект арифметического типа), он состоит из одного выражения, возможно, заключенного в фигурные скобки. Начальное значение объекта находится из выражения; выполняются те же преобразвания, что и при присваивании.

Заметьте, что поскольку не является инициализатором, то X a; является не описанием объекта класса X, а описанием функции, не получающей значений и возвращающей X.

<p>8.6.1 Список инициализаторов</p>

Когда описанная переменная является составной (класс или массив), то инициализатор может состоять из заключенного в фигурные скобки, разделенного запятыми списка инициализаторов для членов составного объекта, в порядке возрастания индекса или по порядку членов. Если массив содерхит составные подобекты, то это правило рекурсивно применяется к членам состаного подобъекта. Если инициализаторов в списке меньше, чем членов в составном подобъекте, то составной подобъект допоняется нулями.

Фигурные скобки могут опускаться следующим образом. Если инициализатор начинается с левой фигурной скобки, то следущий за ней список инициализаторов инициализирует члены сотавного объекта; наличие числа инициализаторов, большего, чем число членов, считается ошибочным. Если, однако, инициализтор не начинается с левой фигурной скобки, то из списка брутся только элементы, достаточные для сопоставления элеметам составного объекта; все остающиеся элементы оставляются для инициализации следующего элемента составного объекта, частью которого является текущий составной объект.

Например,

int x[] = (* 1, 3, 5 *);

описывает и инициализирует x как одномерный массив, имющий три элемента, поскольку размер не был указан и дано три инициализатора.

float y[4][3] = (* (* 1, 3, 5 *), (* 2, 4, 6 *), (* 3, 5, 7 *) *);

Перейти на страницу:

Похожие книги

Основы программирования в Linux
Основы программирования в Linux

В четвертом издании популярного руководства даны основы программирования в операционной системе Linux. Рассмотрены: использование библиотек C/C++ и стан­дартных средств разработки, организация системных вызовов, файловый ввод/вывод, взаимодействие процессов, программирование средствами командной оболочки, создание графических пользовательских интерфейсов с помощью инструментальных средств GTK+ или Qt, применение сокетов и др. Описана компиляция программ, их компоновка c библиотеками и работа с терминальным вводом/выводом. Даны приемы написания приложений в средах GNOME® и KDE®, хранения данных с использованием СУБД MySQL® и отладки программ. Книга хорошо структурирована, что делает обучение легким и быстрым. Для начинающих Linux-программистов

Нейл Мэтью , Ричард Стоунс , Татьяна Коротяева

ОС и Сети / Программирование / Книги по IT
97 этюдов для архитекторов программных систем
97 этюдов для архитекторов программных систем

Успешная карьера архитектора программного обеспечения требует хорошего владения как технической, так и деловой сторонами вопросов, связанных с проектированием архитектуры. В этой необычной книге ведущие архитекторы ПО со всего света обсуждают важные принципы разработки, выходящие далеко за пределы чисто технических вопросов.?Архитектор ПО выполняет роль посредника между командой разработчиков и бизнес-руководством компании, поэтому чтобы добиться успеха в этой профессии, необходимо не только овладеть различными технологиями, но и обеспечить работу над проектом в соответствии с бизнес-целями. В книге более 50 архитекторов рассказывают о том, что считают самым важным в своей работе, дают советы, как организовать общение с другими участниками проекта, как снизить сложность архитектуры, как оказывать поддержку разработчикам. Они щедро делятся множеством полезных идей и приемов, которые вынесли из своего многолетнего опыта. Авторы надеются, что книга станет источником вдохновения и руководством к действию для многих профессиональных программистов.

Билл де Ора , Майкл Хайгард , Нил Форд

Программирование, программы, базы данных / Базы данных / Программирование / Книги по IT
Программист-прагматик. Путь от подмастерья к мастеру
Программист-прагматик. Путь от подмастерья к мастеру

Находясь на переднем крае программирования, книга "Программист-прагматик. Путь от подмастерья к мастеру" абстрагируется от всевозрастающей специализации и технических тонкостей разработки программ на современном уровне, чтобы исследовать суть процесса – требования к работоспособной и поддерживаемой программе, приводящей пользователей в восторг. Книга охватывает различные темы – от личной ответственности и карьерного роста до архитектурных методик, придающих программам гибкость и простоту в адаптации и повторном использовании.Прочитав эту книгу, вы научитесь:Бороться с недостатками программного обеспечения;Избегать ловушек, связанных с дублированием знания;Создавать гибкие, динамичные и адаптируемые программы;Избегать программирования в расчете на совпадение;Защищать вашу программу при помощи контрактов, утверждений и исключений;Собирать реальные требования;Осуществлять безжалостное и эффективное тестирование;Приводить в восторг ваших пользователей;Формировать команды из программистов-прагматиков и с помощью автоматизации делать ваши разработки более точными.

А. Алексашин , Дэвид Томас , Эндрю Хант

Программирование / Книги по IT