为何执行int n=1; n=n++; cout<<n<<endl;输出为1而非2?
关于
n = n++ 为何输出1的清晰解释 先给你拆解清楚n++这个操作的核心逻辑:n++是后置自增运算符,它的规则是:先返回n的当前值,再把n的数值加1。
回到你的代码,我们一步步拆解执行流程:
int n = 1; n = n++; cout<<n<<endl;
- 初始状态下,
n的值是1。 - 执行
n = n++时,先处理右侧的n++:它先取出n的当前值(也就是1)作为这个表达式的返回结果;紧接着把n的数值加1,此时n变成了2。 - 接下来执行赋值操作:把
n++返回的原始值(1)赋值给左边的n,这就把刚刚变成2的n又覆盖回了1。 - 最后输出
n,结果自然就是1了。
你之前看到的“先将n赋值给n,再将n加1”的描述其实有点偏差,正确的顺序应该是:先获取n的原始值作为自增表达式的结果,再自增n,最后用原始值覆盖n。这就是最终结果不是2的关键——自增后的数值被后续的赋值操作覆盖掉了。
另外要提醒一句:在C++标准里,n = n++属于未定义行为(不同编译器可能有不同的执行顺序),实际开发中绝对不要写这种代码!
内容的提问来源于stack exchange,提问作者lyzMaster
相关产品推荐
相关产品推荐

