На этом шаге мы обсудим особенности выполнения операций.
Для большинства операций порядок их выполнения определяется приоритетами, однако существует несколько исключений из этого правила:
#include <iostream.h> main () { int x,y,z,r; x = y=z=1; r = ++x||++y&&++z; cout<<"r="<<r<<",x="<<x<<",y="<<y<<",z="<<z<<endl; /* Операции 1 */ x = y=z=1; r = ++x&&++y||++z; cout<<"r="<<r<<",x="<<x<<",y="<<y<<",z="<<z<<endl; /* Операции 2 */ x = y=z=1; r = ++x&&++y&&++z; cout<<"r="<<r<<",x="<<x<<",y="<<y<<",z="<<z<<endl; /* Операции 3 */ x = y=z=-1; r = ++x&&++y||++z; cout<<"r="<<r<<",x="<<x<<",y="<<y<<",z="<<z<<endl; /* Операции 4 */ x = y=z=-1; r = ++x||++y&&++z; cout<<"r="<<r<<",x="<<x<<",y="<<y<<",z="<<z<<endl; /* Операции 5 */ x = y=z=-1; r = ++x&&++y&&++z; cout<<"r="<<r<<",x="<<x<<",y="<<y<<",z="<<z<<endl; /* Операции 6 */ }
Результаты работы программы:
r=1,x=2,y=1,z=1 r=1,x=2,y=2,z=1 r=1,x=2,y=2,z=2 r=0,x=0,y=-1,z=0 r=0,x=0,y=0,z=-1 r=0,x=0,y=-1,z=-1
Комментарии.
x = y=z=1; r = ++x||++y&&++z;
Сопоставляем операнды с операциями: r = ((++x)||((++y)&&(++z)));. Вычисляем выражение слева направо: r = (2||((++y)&&(++z)));. Поскольку левый операнд операции || имеет значение "истина", бессмысленно проводить вычисления дальше. В языке C++ гарантируется, что в подобных случаях вычисления прекращаются.
x = y=z=1; r = ++x&&++y||++z; r = (((++x)&&(++y))||(++z));
r = ((TRUE&&(++y))||(++z)); x = 2; r = ((2&&2)||(++z)); y=2; r = (TRUE||(++z)); r = 1;
x = y=z=1; r = ++x&&++y&&++z; r = (((++x)&&(++y))&&(++z)); r = ((2&&2)&&(++z)); x = 2; y = 2; r = (TRUE&&(++z)); r = (TRUE&&TRUE); z = 2; r = 1;
x = y=z=-1; r = ++x&&++y||++z; r = (((++x)&&(++y))||(++z); r = ((0&&(++y))||(++z)); x = 0; r = ((FALSE&&(++y))||(++z)); r = (FALSE||(++z));
Здесь нет необходимости вычислять ++y, так как левый операнд логической операции && есть "ложь". Но результат логической операции || пока еще неизвестен.
r = (FALSE||(0)); z = 0; r = (FALSE||FALSE); r = 0;
x = y=z=-1; r = ++x||++y&&++z; r = ((++x)||((++y)&&(++z))); r = (FALSE||((++y)&&(++z))); x = 0; r = (FALSE||(FALSE&&(++z))); y = 0; r = (FALSE||FALSE); r = 0;
x = y=z=-1; r = ++x&&++y&&++z; r = (((++x)&&(++y))&&(++z); r = ((FALSE&&(++y))&&(++z)); x = 0; r = (FALSE&&(++z)); r = 0;
Со следующего шага мы начинаем разбирать основные операторы языка
программирования C++.