КОМПЬЮТЕРНАЯ ЛИТЕРАТУРА

Turbo C++ Version 1.0 Programmer’s Guide

Комментировать

LIB.com.ua [электронная библиотека]: : TURBO C++ Version 1.0 Programmer’s Guide

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

i = v[i++]; // i неопределено

Значение i зависит от того, выполняется ли инкременти-
рование до или после присвоения. Аналогичным образом,

int total = 0;

— 75 —
sum = [total = 3] + (++total);// sum = 4 или sum = 7 ??

имеет неоднозначность идентификаторов sum и total. Ре-
шение состоит в том, чтобы упростить выражение при помощи
временной переменной:

int temp, temp = 0;
temp = ++total;
sum = (total = 3) + temp;

Когда синтаксиспринудительно устанавливает последова-
тельность вычисления операндов, то множественные вычисления
в одной конструкции не содержат опасности неоднозначности:

sum = (i = 3, i++, i++); // так можно: sum = 4, i = 5

Каждое под-выражение или выражение с запятыми вычисля-
ется слева-направо, и все выражение в целом вычисляется по-
направлению к самому правому значению.

Turbo C++ перегруппирует выражения, реорганизовывая ас-
социативные и коммутативные операции независимо от наличия
круглых скобок, с тем, чтобы получить эффективно компилируе-
мое выражение; реорганизация выражения ни в коем случае не
влияет на результатвычисления выражения.

Круглые скобки можно использовать для того, чтобы при-
нудительно задать порядок вычислений в выражении. Например,
если имеются переменные a, b, c и f, то выражение f=a+(b+c)
вызывает сначала вычисление (b+c), а затем уже сложение ре-
зультата с a.

Ошибки и переполнения

Во время вычисления выражения Turbo C++ может встретить
многие проблематичные ситуации, как то деление на ноль или
получение значений с плавающей точкой, выходящих за пределы
допустимого диапазона. Переполнение целочисленных значений
игнорируется (С использует арифметические действия по модулю
2 в n-разрядных регистрах), однако ошибки, обнаруживаемые
математическими библиотечными функциями, могут обрабатывать-
ся стандартными или определяемыми пользователем подпрограм-
мами. См. matherr и signal в Справочнике по Библиотеке.

— 76 —
Семантика операций

Описанные здесь операции Turbo C++ являются операциями
стандарта ANSI C.

Если операции не перегружены, то следующая информация
действительна как для С, так и для С++. В С++ вы можете пе-
регрузить все эти операции, за исключением операции . (опе-
рация задания компонента) и ?: (условная операция) (также не
могут быть перегружены операции С++ :: и .*).

Если операция перегружена, то приводимые здесь сведени-
ядля нее недействительны.Таблица 1.19 на стр.74 оригинала
приводит синтаксис для всех операций и выражений с операция-
ми.
Постфиксные и префиксные операции

Шесть постфиксных операций [] () . -> ++и — использу-
ются для построения постфиксных выражений, показанных в таб-
лице синтаксиса выражений (таблица 1.19). Операции
инкремента и декремента (++ и —) также являются префиксными
и унарными операциями;они обсуждаются, начиная со стр.79
оригинала.

Операция индексации массива [] —————————

В выражении

постфиксное-выражение [выражение]

в С, но не обязательно в С++, выражение выраж1[выраж2]
определяется как

*((выраж1) + (выраж2))

где либо выраж1 это указатель, а выраж2 это целочислен-
ное значение, либо выраж1 это это целочисленное значение, а
выраж1 это указатель. (Каждый из пунктуаторов [], * и + мо-
жет быть перегружен в С++).

Операция вызова функции ()

Выражение

постфиксное-выражение()

представляет собой вызов функции, задаваемой постфикс-
ным выражением. Список-аргументов-выражения — это разделяе-
мый запятой список выражения любого типа, задающий
фактические (или действительные) аргументы функции. Значение
самого выражения вызова функции, если оно вообще имеет мес-
то, определяется оператором возврата в определении функции.
См. «Вызовы функций и преобразования аргументов» на стр.63
оригинала, где приводится более поробное изложение вызова
функций.

Операция задания компонента структуры/объединения . (точка)

В выражении

постфиксное-выражение . идетификатор

постфиксное-выражениедолжно иметь тип структуры или
объединения; идентификатор должен являться именем компонента
данной структуры или объединения. Выражение обозначает объ-
ект — компонент структуры или объединения. Значением данного
выражения будет являться значение выбранного таким образом
компонента; оно будет являться именующим выражением (lvalue)

— 77 —
в том и только том случае, если именующим выражением являет-
ся само постфиксное выражение. Подробное описание использо-
вания операций . и -> дается на стр.66 оригинала.

Именующие выражения определяются на стр.28 оригинала.

Операция указателя структуры/объединения ->

В выражении

постфиксное-выражение -> идентификатор

должно иметьтип указателя структуры или указателя объ-
единения; идентификатор же должен быть именем компонента
этой структурыили объединения. Выражение обозначает объект —
компонент структуры или объединения. Значением данного выра-
жения будет являться значение выбранного таким образом ком-
понента; оно будет являться именующим выражением (lvalue) в
том и только том случае, если именующим выражением является
само постфиксное выражение.

Операция постфиксного инкремента ++

В выражении

постфиксное-выражение++
операндом является постфиксное выражение:
оно должно быть скалярного типа (арифметического или
типа указателя) и должно являться модифицируемым именующим
выражением (более подробная информация об именующих выраже-
ниях приводится на стр.28 оригинала.) Постфикс ++ также на-
зывают операцией постинкремента. Значением всего выражения
является значение постфиксного выражения до выполнения инк-
ремента. После вычисления постфиксного выражения операнд ин-
крементируется на 1.

Величина инкремента зависит от типа операнда. Значения
типа указателя вычисляются по правилам арифметических дейс-
твий с указателями.

Постфиксная операция декремента —

Постфиксная операция декремента, также известная как
постдекремент, подчиняется тем же правилам, что и операция
постфиксного инкремента, за исключением того, что единица
после вычислениявыражения вычитается.

Операции инкремента и декремента

Первыми двумя унарными операциями являются операции ++
и —. Эти операции бывают как постфиксными, так и префиксны-
ми, и поэтому обсуждаются в данногмразделе. Затем рассматри-
ваются остальные шесть префиксных операций.

Операция префиксного инкремента ++

В выражении

++ унарное-выражение

операндом является унарное выражение:
оно должно быть скалярного типа (арифметического или
типа указателя) и должно являться модифицируемым именующим
выражением. Операцию префиксного инкремента также называют
операцией преинкремента. Операнд инкрементируется на 1 до
вычисления выражения; значением всего выражения является ин-
крементированное значение операнда. Величина инкремента за-

— 78 —
висит от типа операнда. Значения типа указателя вычисляются
по правилам арифметических действий с указателями.

Префиксная операция декремента —

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *