Целочисленное преобразование (integral promotion). Подмножество стандартных преобразований, при которых меньший целочисленный тип приводится к ближайшему большему типу. Операнды меньших целочисленных типов (например, short
, char
и т.д.) преобразуются всегда, даже если такие преобразования, казалось бы, необязательны.
Глава 5
Операторы
Подобно большинству языков, язык С++ предоставляет операторы для условного выполнения кода, циклы, позволяющие многократно выполнять те же фрагменты кода, и операторы перехода, прерывающие поток выполнения. В данной главе операторы, поддерживаемые языком С++, рассматриваются более подробно.
Большинство операторов в языке С++ заканчиваются точкой с запятой. Выражение типа ival + 5
становится
ival + 5; //
cout << ival; //
Первое выражение бесполезно: результат вычисляется, но не присваивается, а следовательно, никак не используется. Как правило, выражения содержат операторы, результат вычисления которых влияет на состояние программы. К таким операторам относятся присвоение, инкремент, ввод и вывод.
Самая простая форма оператора — это ;
).
; //
Пустой оператор используется в случае, когда синтаксис языка требует наличия оператора, а логика программы — нет. Как правило, это происходит в случае, когда вся работа цикла осуществляется в его условии. Например, можно организовать ввод, игнорируя все прочитанные данные, пока не встретится определенное значение:
//
//
while (cin >> s && s != sought)
; //
В условии значение считывается со стандартного устройства ввода, и объект cin
неявно проверяется на успешность чтения. Если чтение прошло успешно, во второй части условия проверяется, не равно ли полученное значение содержимому переменной sought
. Если искомое значение найдено, цикл while
завершается, в противном случае его условие проверяется снова, начиная с чтения следующего значения из объекта cin
.
Поскольку пустой оператор является вполне допустимым, он может располагаться везде, где ожидается оператор. Поэтому лишний символ точки с запятой, который может показаться явно недопустимым, на самом деле является не более, чем пустым оператором. Приведенный ниже фрагмент кода содержит два оператора: оператор выражения и пустой оператор.
ival = v1 + v2;; //
//
Хотя ненужный пустой оператор зачастую безопасен, дополнительная точка с запятой после условия цикла while
или оператора if
может решительно изменить поведение кода. Например, следующий цикл будет выполняться бесконечно:
//
//
while (iter != svec.end()) ; //
++iter; //
Несмотря на отступ, выражение с оператором инкремента не является частью цикла. Тело цикла — это пустой оператор, обозначенный символом точки с запятой непосредственно после условия.