C++代码执行a+a++运算后变量a自增2的原因求解
#include<iostream> using namespace std; int main() { int a = 5; int c; c = a+ a++; cout<<"c = a + a++ : "<<c<<" = "<<a<<" + "<<a++; }
为什么a会自增2
代码里一共出现了2次后置自增操作a++,每个a++都会给a的数值加1,两次操作叠加就会让初始值为5的a最终变为7。
执行逻辑说明
- 后置自增运算符
a++的规则是:先返回a当前的原值,同时产生「将a的值加1」的副作用,这个副作用的执行时机仅保证在当前序列点之前完成,不会指定在表达式计算的具体步骤。 - 第一处
a++出现在赋值语句c = a + a++;中:你当前使用的编译器在处理这个表达式时,先触发a++的副作用将a变为6,再取此时a的值6和a++返回的原值5相加,得到11赋值给c。 - 第二处
a++出现在cout输出语句的末尾:C++17标准之前,<<运算符的操作数求值顺序没有明确规定,你的编译器优先对最右侧的a++求值:先返回a当前的数值6,随后触发副作用将a变为7,再对左侧输出项的a求值得到7,最终按从左到右的输出顺序打印出c = a + a++ : 11 = 7 + 6。
重要提示
这种在同一个表达式中多次修改同一变量、或者同时修改和读取同一变量的写法,在C++中属于未定义行为,不同编译器、不同编译版本甚至不同编译参数下的运行结果都可能不一致,属于错误的代码写法,实际开发中必须避免。
内容的提问来源于stack exchange,提问作者Vo Tuan Huy
相关产品推荐
相关产品推荐

