OOD*_*DAX 5 c volatile assignment-operator language-lawyer
volatile int lhs = 1;
int rhs = 2;
int x = 3;
x = lhs = rhs;
Run Code Online (Sandbox Code Playgroud)
赋值运算符是否返回 (typeof lhs)rhs ?或者它是否返回新的,只是读取 lhs 的值?这对我来说很重要,因为 lhs 是不稳定的,并且它可以在分配之间发生变化。
我在 cppreference 找不到答案。
C标准没有规定是否lhs读取;它允许任何一种行为。
C 2018 6.5.16 指定了赋值运算符。第 3 段说:
\n\n\n\xe2\x80\xa6 赋值表达式具有赋值后左操作数的值,115),但不是左值\xe2\x80\xa6
\n
脚注 115 说:
\n\n\n允许实现读取对象来确定值,但不要求这样做,即使对象具有 易失性限定类型。
\n
因此,允许实现执行以下任一操作:
\nlhs(大概是在更新的副作用完成之后)以确定 的值lhs = rhs;,或者rhs直接使用转换为 类型后得到的值lhs。