| |
BIGLIB |
| большущая библиотека (9812 книг), можно не только прочитать но и скачать бесплатно |
|
| |
ФАНТАСТИКА |
| фентези,
фантастика, фантастические повести |
|
| |
ФИЛОСОФИЯ |
книги, которые заставляют
задуматься над окружающим тебя миром.
|
|
| |
МЕДИЦИНА |
медицинские книги,
методички,
народные лечебники |
|
| |
КУЛИНАРИЯ |
рецепты
тортов, консервирование,
все о спиртных
напитках. |
|
| |
СТИХИ |
| стихи популярных
и не очень авторов |
|
| |
ТВОРЧЕСТВО |
| народное творчество,
стихи, песни и т.д. |
|
| |
ЮМОР |
| анекдоты, приколы,
смешные истории |
|
| |
ЭРОТИКА |
| эротические рассказы,
книги о технике секса,
кама-сутра и др. |
|
|
| |
 |
цируют, и используют значение одного и того же объекта.
Рассмотрим выражение
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 -
висит от типа операнда. Значения типа указателя вычисляются
по правилам арифметических действий с указателями.
Префиксная операция декремента --
|
adfun.ru
|
|
|
|