gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 01:56:37 26 4
gpt4 key购买 nike

The C++11 standard (5.17, expr.ass) 指出

In all cases, the assignment is sequenced after the value computation of the right and left operands, and before the value computation of the assignment expression. With respect to an indeterminately-sequenced function call, the operation of a compound assignment is a single evaluation

这是否意味着,表达式:

int a = 1, b = 10;
int c = (a+=1) + (b+=1);

if ( c == 10+1+1+1 ) {
printf("this is guaranteed");
} else {
printf("not guaranteed");
}

将始终评估为 c==23

最佳答案

表达式

int c = (a+=1) + (b+=1);

(编辑:添加了缺失的括号,我认为这就是您的意图)

有以下子表达式

(1) a+=1
(2) b+=1
(3) (1)+(2)
(4) c = (3)

未指定 (1) 和 (2) 的计算顺序,编译器可以自由选择它喜欢的任何顺序。

(1) 和 (2) 都必须在编译器可以计算 (3) 之前计算。

(3) 必须在 编译器可以评估 (4) 之前评估。

现在,由于 (1) 和 (2) 的计算顺序无关紧要,总体结果定义明确,您的代码将始终生成 13 并打印“this is now standard”。请注意,一直都是这样,这在 C++11 中并不新鲜。

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

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