You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

后缀++运算符优先级高于=,为何赋值结果仍为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 10:04:23