- •Циклы Цикл for
- •Части цикла for
- •Выражения и операторы
- •Не выражения и операторы
- •Отклонения от правил
- •Изменение шага цикла
- •Доступ внутрь строк с помощью цикла for
- •Операции инкремента и декремента
- •Комбинация операций присваивания
- •Составные операторы, или блоки
- •Выражения отношений
- •Цикл while
- •Сравнение циклов for и while
- •Цикл do while
Выражения и операторы
Управляющий раздел for включает три выражения.
Любое значение или любая допустимая комбинация выражений и операций составляет выражение.
Например, 10 — это выражение со значением 10, а
28 * 20 — выражение со значением 560. В C++ любое выражение имеет свое значение. Часто оно вполне очевидно. Например, следующее выражение формируется из двух значений и операции сложения, и оно равно 49:
22 + 27
Иногда значение не столь очевидно. Например, показанный ниже код — это тоже выражение, потому что формируется из двух значений и операции присваивания:
X = 20
В C++ значение выражения присваивания определяется как значение его левой части, поэтому данное выражение имеет значение 20. Тот факт, что выражения присваивания имеют значения, означает, что допускаются операторы вроде такого:
maids = (cooks = 4) + 3;
Выражение cooks = 4 имеет значение 4, поэтому maids присваивается значение 7. Однако то, что C++ допускает подобное поведение, не значит, что вы должны злоупотреблять им. То же самое правило, которое разрешает такие специфические операторы, также означает, что разрешен следующий удобный оператор:
х = у = z = 0;
Это быстрый способ установки одного и того же значения нескольким переменным. Согласно приоритету, присваивание ассоциируется справа налево, поэтому первый 0 присваивается z, затем z = 0 присваивается у и т.д.
И, наконец, выражения отношений, такие как х < у, вычисляются как значения true и false типа bool.
#include <iostream>
int main()
{
using namespace std;
int x;
cout << "The x = 100 has the value ";
cout << (x = 100) << endl;
cout << "Now x = " << x << endl;
cout << "The x < 3 has the value ";
cout << (x < 3) << endl;
cout << "The x > 3 has the value ";
cout << (x > 3) << endl;
cout.setf(ios_base::boolalpha); //новое средство C++
cout << "The x < 3 has the value ";
cout << (x < 3) << endl;
cout << "The x > 3 has the value ";
cout << (x > 3) << endl;
getchar();
return 0;
}
От выражения до оператора программы один шаг; для этого достаточно добавить точку с запятой. То есть следующий код будет выражением:
age = 100
В то же время показанный ниже код является оператором:
age = 100;
Точнее, это оператор выражения. Любое выражение может стать оператором, если к нему добавить точку с запятой, но результат может не иметь смысла с точки зрения программы. Например, если rodents — переменная, то следующий код представляет собой допустимый оператор C++:
rodents + 6;
// допустимое, однако бессмысленное выражение
Компилятор разрешает такой оператор, но он не делает ничего полезного. Программа просто вычисляет сумму, ничего с ней не делает и переходит к следующему оператору.
Не выражения и операторы
Некоторые концепции, такие как структуры или цикл for, являются ключевыми для понимания C++.
Но существуют также относительно менее значимые аспекты синтаксиса, которые иногда могут сбивать с толку, когда уже кажется, что язык вполне понятен. Несколько из них мы сейчас рассмотрим.
Хотя утверждение о том, что добавление точки с запятой к любому выражению превращает его в оператор, справедливо, обратное не верно. То есть исключение точки с запятой из оператора не обязательно преобразует его в выражение. Из всех разновидностей операторов, которые мы рассмотрели до сих пор, операторы возврата, операторы объявления и операторы for не укладываются в правило оператор = выражение + точка с запятой. Например, вот оператор:
int load;
Однако фрагмент int load не является выражением и не имеет значения. Это делает следующий код некорректным:
eggs = int toad * 1000; //не верно, это — не выражение
cin >> int toad; // нельзя комбинировать объявление с cin
Подобным же образом нельзя присваивать цикл for переменной. В следующем примере цикл for — это не выражение, поэтому он не имеет значения, и присваивать его не разрешено:
int fx = for (i = 0; i< 4; i++)
cout >> i; // невозможно