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

Объект типа void* (указатель на void) можно использовать для указания на объекты неизвестного типа.

<p>5. Объекты и Lvalue (адреса)</p>

Объект есть область памяти. lvalue (адрес) есть выражние, ссылающееся на объект. Очевидный пример адресного выржения – имя объекта. Есть операции, дающие адресные выражния: например, если Е – выражение типа указатель, то *Е – адресное выражение, ссылающееся на объект, на который указвает Е. Термин «lvalue» происходит из выражения присваивания Е1=Е2, в котором левый операнд Е1 должен быть адресным (value) выражением. Ниже при обсуждении каждого оператора указывается, требует ли он адресные операнды и возвращает ли он адресное значение.

<p>6. Преобразования</p>

Определенные операции могут в зависимости от их операдов вызывать преобразование значения операнда от одного типа к другому. В этой части объясняется, каков ожидаемый резултат таких преобразований. В #6.6 содержится краткое описание преобразований, требуемых наиболее стандартными операциями; оно будет дополняться по мере надобности в процессе обсуждния каждой операции. В #8.5.6 описываются преобразования, оределяемые пользователем.

<p>6.1 Символы и целые</p>

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

В машинах, где символы рассматриваются как имеющие знак (знаковые), символы множества кода ASCII являются положителными. Однако, символьная константа, заданная восьмеричной escпоследовательностью подвергается знаковому расширению и может стать отрицательным числом; так например, '\377' имеет значение -1.

Когда длинное целое преобразуется в короткое или в char, оно урезается влево; избыточные биты просто теряются.

<p>6.2 Float и Double</p>

Для выражений float могут выполняться действия арифметки с плавающей точкой одинарной точности. Преобразования меду числами одинарной и двойной точности выполняются настолько математически корректно, насколько позволяет аппаратура.

<p>6.3 Плавающие и целые</p>

Преобразования плавающих значений в целочисленный тип имеет склонность быть машинно-зависимым. В частности, напраление усечения отрицательных чисел различается от машины к машине. Если предоставляемого пространства для значения не хватает, то результат неопределен.

Преобразование целочисленного значения в плавающий тип выполняются хорошо. При нехватке в аппаратной реализации трбуемых бит возникает некоторая потеря точности.

<p>6.4 Указатели и целые</p>

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

Можно производить вычитание над двумя указателями на объекты одного типа; в этом случае результат преобразуется к типу int или long в зависимости от машины, см. #7.4.

<p>6.5 Unsigned</p>

Всегда при сочетании целого без знака и обычного целого обычное целое преобразуется к типу unsigned и результат имеет тип unsigned. Значением является наименьшее целое без знака, равное целому со знаком (mod 2**(размер слова)) (т.е. по мдулю 2**(размер слова)). В дополнительном двоичном предсталении это преобразование является пустым, и никаких реальных изменений в двоичном представлении не происходит.

При преобразовании целого без знака в длинное значение результата численно совпадает со значением целого без знака. Таким образом, преобразование сводится к дополнению нулями слева.

<p>6.6 Арифметические преобразования</p>

Большое количество операций вызывают преобразования и дают тип результата одинаковым образом. Этот стереотип будет называться «обычным арифметическим преобразованием».

Во-первых, любые операнды типа char, unsigned char или short преобразуются к типу int.

Далее, если один из операндов имеет тип double, то дргой преобразуется к типу double и тот же тип имеет рзультат.

Иначе, если один из операндов имеет тип unsigned long, то другой преобразуется к типу unsigned long и таков же тип результата.

Иначе, если один из операндов имеет тип long, то другой преобразуется к типу long и таков же тип результата.

Иначе, если один из операндов имеет тип unsigned, то другой преобразуется к типу unsigned и таков же тип рзультата.

Иначе оба операнда должны иметь тип int и таков же тип результата.

<p>6.7 Преобразования указателей</p>

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

Константа 0 может преобразовываться в указатель, и грантируется, что это значение породит указатель, отлиный от указателя на любой объект.

Указатель любого типа может преобразовываться в void*.

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

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

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

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

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

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

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

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

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

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

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

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