以下代码中的两个赋值之间是否存在序列点:
f(f(x=1,1),x=2);发布于 2011-09-27 19:12:45
the (draft) standard 6.5.2.2,10中的相关引用是:
未指定函数指示符、实际参数和子表达式在实际参数中的求值顺序,但在实际调用之前有一个序列点。
因此,对于您的表达式,第一个参数(特别是对f的调用)可以在第二个参数之前进行计算;例如:
(x = 1, 1), f <sp> call, (x = 2), f <sp> call或者,可以在第二个参数之后对其求值;例如:
(x = 2), (x = 1, 1), f <sp> call, f <sp> call函数调用本身可以(并且很可能会)包含更多的序列点(特别是如果它包含一条return语句)。
根据这一点,赋值之间是否存在序列点。这取决于平台(“未指明”)。
由于在第二种情况下,您在两个序列点之间为x赋值两次,因此您在这样的平台上具有未定义的行为。
https://stackoverflow.com/questions/7356573
复制相似问题