gpt4 book ai didi

c++ - 在 C++11 的一个表达式中对同一个变量进行双重赋值

转载 作者:可可西里 更新时间:2023-11-01 15:05:33 25 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 = 0;
a = (a+=1) = 10;

if ( a == 10 ) {
printf("this is defined");
} else {
printf("undefined");
}

总是评估为 a==10

最佳答案

是的,C++98 和 C++11 之间发生了变化。我相信您的示例在 C++11 规则下定义明确,但在 C++98 规则下表现出未定义的行为。

作为一个更简单的示例,x =++x; 在 C++98 中未定义,但在 C++11 中定义明确。请注意,x = x++; 仍未定义(后增量的副作用与表达式的计算无关,而前增量的副作用在表达式的计算之前排序)。

关于c++ - 在 C++11 的一个表达式中对同一个变量进行双重赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19586893/

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