use*_*214 4 c++ evaluation operator-precedence
我刚刚读到,运算符的评估顺序和优先级是不同的,但在C++中是相关的概念.但我还不清楚这些有什么不同但有关系?
int x = c + a * b; // 31
int y = (c + a) * b; // 36
Run Code Online (Sandbox Code Playgroud)
上述陈述与评估顺序有何关系.例如,当我说(c + a)我通过改变其优先级来改变表达式的评估顺序时?
关于评估顺序的重要部分是任何组分是否具有副作用.
假设你有这个:
int i = c() + a() * b();
Run Code Online (Sandbox Code Playgroud)
凡a与b有副作用:
int global = 1;
int a() {
return global++;
}
int b() {
return ++global;
}
int c() {
return global * 2;
}
Run Code Online (Sandbox Code Playgroud)
编译器可以选择什么样的顺序调用a(),b()并且c()然后将结果插入表达.此时,优先级接管并决定应用+和*运算符的顺序.
在这个例子中,最可能的结果是
c()第一,其次a()然后b(),产生i = 2 + 1 * 3 = 5b()第一,其次a()然后c(),产生i = 6 + 2 * 2 = 10但是编译器可以自由选择它想要的任何顺序.
简短的故事是,优先让您了解运营商应用到(参数的顺序*前+),而评估的顺序会告诉你什么样的顺序参数都解决了(a(),b(),c()).这就是他们"不同但相关"的原因.