gpt4 book ai didi

c++ - 表达式的求值顺序

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:08:11 25 4
gpt4 key购买 nike

我刚刚读到计算顺序和运算符的优先级在 C++ 中是不同但相关的概念。但我仍然不清楚它们有何不同但又相关?

int x = c + a * b;    // 31
int y = (c + a) * b; // 36

以上陈述与评估顺序有什么关系。例如当我说 (c + a) 时,我是不是通过改变它的优先级来改变表达式的求值顺序?

最佳答案

关于评估顺序的重要部分是任何组件是否有副作用。

假设你有这个:

int i = c() + a() * b();

ab 有副作用:

int global = 1;

int a() {
return global++;
}
int b() {
return ++global;
}
int c() {
return global * 2;
}

编译器可以选择调用a()b()c()的顺序,然后将结果插入到表达。此时,优先级接管并决定应用 +* 运算符的顺序。

在这个例子中,最有可能的结果是

  1. 编译器将首先评估c(),然后是a(),然后是b(),结果是i = 2 + 1 * 3 = 5
  2. 编译器会先计算b(),然后是a(),然后是c(),结果是i = 6 + 2 * 2 = 10

但编译器可以自由选择它想要的任何顺序。

简而言之,优先级 告诉您运算符应用于参数的顺序(*+ 之前),而 order of evaluation 告诉您参数解析的顺序(a()b()c() ).这就是为什么它们“不同但相关”。

关于c++ - 表达式的求值顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7618590/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com