gpt4 book ai didi

c++ - 表达式评估顺序

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

我最近对以下 C++ 片段感到困惑:

#include <cstdio>

int lol(int *k){
*k +=5;
return *k;
}

int main(int argc, const char *argv[]){
int k = 0;
int w = k + lol(&k);
printf("%d\n", w);
return 0;
}

看看线:

int w = k + lol(&k);

直到现在,我认为这个表达式将从左到右求值:获取 k 的当前值(在调用 lol 函数之前为 0),然后将其添加到 lol 函数的结果中。但是编译器证明我错了,w ​​的值是 10。即使我切换位置来制作它

int w = lol(&k) + k;

结果仍然是 10。我做错了什么?

托梅克

最佳答案

这是因为表达式中的参数指定以任何特定顺序计算。

编译器可以自由地先执行参数klol(&k)。该表达式中没有序列点。 这意味着参数的副作用可以按任何顺序执行。

所以简而言之,没有指定代码是打印 5 还是 10。两者都是有效输出。

bool 表达式中的短路是个异常(exception),因为 &&|| 是序列点。 (见评论)

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

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