C ++中变量的评估顺序

时间:2015-08-23 08:40:02

标签: c++ c++11 c++14 operator-precedence

我得到了一个我无法完全理解的有趣程序。

#include <iostream>
#include <typeinfo> //added by me to check 'h' variable type
using namespace std;

int main()
{

    int a = -1, b =1, c = 1, d = 0, e = 2, f = 2, g = 0;
    int  h =  f-- && e++ && d++ && c-- || b++ || a++; //interesting part
    cout << "f:" << f << << " e:" << e << " d:" << d << " c:" << c << " b:" << d 
    << " a:" << a << " g:" << g << " h:" << h <<endl;
    cout << "h variable type :" << typeid(h).name() << endl;
    return 0;
    } 

所以'h'变量是问题,它在到达c--部分时会增加和减少(c--永远不会发生),而a ++也不会像c--那样发生。 这是为什么? 如果我正确它的东西:h = f--(true)和e ++(true)和d ++(true)和c--(这是假的(如果c = 0)其他发生)或b ++是(真)或一个++(也是如此)。 'h'变量类型是int。但对我来说它看起来像布尔。

编辑:

好的,所以帮助你们,我想出它是如何工作的,前后操作数是什么,非常感谢!

现在我开始打印它是如何工作的,我发现有点奇怪的事情。 如果我运行这个

if(f-- && e++ && d++ & c-- || b++)
cout << "f:" << f << " e:" << e << " d:" << d << " c:" << c << " b:" << b << endl;

它给出了以下内容: f:1 e:3 d:1 c:1 b:2 除C变量外,一切都递增和递减。这有点奇怪。任何人都有任何想法,而C变量是唯一没有递减的,为什么?

0 个答案:

没有答案