为什么以下给定表达式会调用未定义的行为?
int i = 5;
i = (i,i++,i) + 1
我的问题受到Als的影响在这里提问
它不是未定义的。
在这里回答C,序列点和偏序
我认为这同样适用于 C++(这是我在看到该链接之前的回复):
逗号运算符引入了一个序列点(并在某种程度上限制了表达式必须计算的顺序 - 先左后右),因此:
- 的两个修改
i
由序列点(第二个逗号)分隔。
- 的修改
i
in i++
通过序列点与其他所有内容分开。
- 的修改
i
by =
is not与最后一次出现的分开i
在表达式中,但这没关系,因为我们可以访问i
并在没有介入序列点的情况下修改它,前提是访问是“确定要存储的值”(5/4)。
- 正如 Als 所说,实际上,只要每个人都有不编写代码的基本常识,该代码是否已定义行为并不重要;-)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)