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

为什么C++中使用x,y = 10,20赋值后变量x的取值不符合预期?

问题原因解释

你遇到的问题核心是对C++逗号运算符的行为理解有误,同时触发了未初始化变量的未定义行为。

你代码中的x, y = 10, 20;写法完全不符合你预期的赋值逻辑,具体拆解如下:

  • C++中逗号作为运算符时,优先级远低于赋值运算符,且遵循左结合规则:整个表达式会从左到右依次执行每个子项,最终返回最右侧子项的结果。
  • 这行代码会被编译器拆分为3个按顺序执行的子表达式:
    1. 读取变量x的值:x是声明后未初始化的局部int变量,读取未初始化变量属于未定义行为
    2. 执行y = 10:给变量y赋值为10
    3. 计算字面量20:整个逗号表达式的最终结果是20,但该值没有被任何变量接收,直接丢弃

你预期的“给x赋值10,y赋值20”的正确写法是x = 10, y = 20;,更推荐直接拆分两行赋值避免歧义:

x = 10;
y = 20;

关于你得到输出16的原因:未初始化的栈局部变量的值是栈内存中对应位置的残留脏数据,16只是本次运行时刚好存储在x对应内存地址的旧值,该值完全不确定,换编译环境、运行参数都可能得到完全不同的结果,甚至程序直接崩溃,这就是未定义行为的典型表现。

内容的提问来源于stack exchange,提问作者kNIG132103

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 04:57:02