为什么C++中使用x,y = 10,20赋值后变量x的取值不符合预期?
问题原因解释
你遇到的问题核心是对C++逗号运算符的行为理解有误,同时触发了未初始化变量的未定义行为。
你代码中的x, y = 10, 20;写法完全不符合你预期的赋值逻辑,具体拆解如下:
- C++中逗号作为运算符时,优先级远低于赋值运算符,且遵循左结合规则:整个表达式会从左到右依次执行每个子项,最终返回最右侧子项的结果。
- 这行代码会被编译器拆分为3个按顺序执行的子表达式:
- 读取变量
x的值:x是声明后未初始化的局部int变量,读取未初始化变量属于未定义行为 - 执行
y = 10:给变量y赋值为10 - 计算字面量
20:整个逗号表达式的最终结果是20,但该值没有被任何变量接收,直接丢弃
- 读取变量
你预期的“给x赋值10,y赋值20”的正确写法是x = 10, y = 20;,更推荐直接拆分两行赋值避免歧义:
x = 10; y = 20;
关于你得到输出16的原因:未初始化的栈局部变量的值是栈内存中对应位置的残留脏数据,16只是本次运行时刚好存储在x对应内存地址的旧值,该值完全不确定,换编译环境、运行参数都可能得到完全不同的结果,甚至程序直接崩溃,这就是未定义行为的典型表现。
内容的提问来源于stack exchange,提问作者kNIG132103
相关产品推荐
相关产品推荐

