后缀++运算符优先级高于=,为何赋值结果仍为5?
为什么后缀++优先级更高,但输出还是5?
嘿,这个问题其实是把运算符优先级和后缀++的核心语义搞混啦,我给你拆解清楚:
首先得明确两个关键知识点:
- 运算符优先级决定的是表达式的语法分组逻辑(也就是哪个运算符先和操作数绑定),不是谁先完成求值并返回结果的顺序
- 后缀
++运算符的标准行为是:先返回操作数的当前值,再对操作数执行自增操作
咱们先看第一段代码:
int a = 5; int b = a++; cout << "b is " << b << endl; // b is 5
因为后缀++优先级高于=,所以这个表达式会被解析成 b = (a++)(而不是语法错误的(b=a)++)。但a++本身的求值结果就是a原来的5,之后a才会自增到6,所以赋值给b的是5,输出自然是5。
再看第二段代码:
int get_number(){ int a = 5; return a++; } int main(){ int b = get_number(); cout << "b is " << b << endl; // b is 5 }
这里return a++;的逻辑和上面完全一致:a++先返回当前值5,然后a自增到6(但这个a是函数内的局部变量,自增后就会被销毁,不影响返回值),所以函数返回5,赋值给b后输出还是5。
你之前误以为“优先级高就会先自增再赋值”,但优先级只是确保a++作为一个整体成为赋值的右操作数,而后缀++本身的规则就是返回原值——这是C++标准明确规定的行为,和优先级高低没有关系哦。
内容的提问来源于stack exchange,提问作者Amirabbas asadi
相关产品推荐
相关产品推荐

