优先顺序和评估顺序

CHA*_*HAN 0 c

我对评估的优先顺序和顺序感到困惑.请用一个例子来解释我

Mar*_*ell 5

这是一个秘密:我不打扰学习优先规则.它们太容易出错了,它让下一个看待代码的人思考得太多了.换句话说:假设维护你的代码的人是一个挥舞着斧头的心理学家,他知道你住在哪里.他们也很好.

所以而不是:

x = a + b * c / d;
Run Code Online (Sandbox Code Playgroud)

我会用:

x = a + ((b * c) / d);
Run Code Online (Sandbox Code Playgroud)

或者更好(主观),将其分解为单独的语句或许,更棘手的问题是在"聪明"的代码行中发生的事情,这些代码行在后面的行中对表达式有副作用:

x = Func(z) * a[i++] + i; // where Func(z) somehow mutates i
                          // (or even worse when using "conditional" etc)
Run Code Online (Sandbox Code Playgroud)

应该谨慎使用这些东西,你应该尝试知道什么行为被定义,什么是明确未定义但是工作(或失败)取决于你使用的编译器.