📜  C++程序的输出| 20套

📅  最后修改于: 2022-05-13 01:56:11.030000             🧑  作者: Mango

C++程序的输出| 20套

预测程序下面的输出

#include
using namespace std;
int main()
{
    int x = 1 , y = 1, z = 1;
  
    cout << (++x || ++y && ++z ) << endl;  
  
    cout << x << " " << y << " " << z ;          
  
    return 0;
}

解释:-
它基于LOGICAL – OR 和LOGICAL-AND 如何工作的事实。请注意,Compiler 从左到右读取 OR 和 AND运算符。让我们考虑以下情况:-

#include
using namespace std;
int main()
{
    int x = 1 , y = 1;
    cout << ( ++x  || ++y ) << endl;   // outputs 1;
    cout << x << " " << y;             // x = 2 , y = 1;
    return 0;
}

输出:

1
2 1

一旦编译器在逻辑 OR 的左侧检测到“真”,它就不会评估右侧!,因为即使是真,整个“或”表达式也会变成真!。 SO 编译器跳过 RIGHT 部分并将结果显示为 1 !所以 y 在这里没有增加,因为编译器跳过了读取它!



#include
using namespace std;
int main()
{
    int x = 1 , y = 1;
    cout << ( ++x && ++y ) << endl;     //outputs 1;
    cout << x << " " << y;              // x = 2 , y = 2;
    return 0;
}

输出:

1
2 2

LOGICAL AND 需要评估左右部分(想想看!)所以左右部分都被评估,因此在这里增加了 x 和 y。

#include
using namespace std;
int main()
{
    int x = 1 , y = 1, z = 1;
    cout << ( ++x || ++y && ++z ) << endl;    //outputs 1;
    cout << x << " " << y << " " << z ;       //x = 2 , y = 1 , z = 1;
    return 0;
}

输出:

1
2 1 1

这里编译器首先增加 x ,然后它检测到一个逻辑或。我们在左侧有一个真实的数量。所以编译器不会读取正确的部分。因此增加 x 和 y,z 保持不变!