c ++中的赋值运算符是返回rvalue还是左值?

Suk*_*lay 6 c++ expression operator-precedence

c ++中的赋值运算符是返回rvalue还是左值?如果它是左值,那么两个参数中的哪一个会增加?

(a = b)++
Run Code Online (Sandbox Code Playgroud)

mas*_*oud 9

它返回一个左值.根据§5.17:

赋值运算符(=)和复合赋值运算符都是从右到左分组.所有都需要一个可修改的左值作为左操作数,并返回一个左值操作数的左值.

如果这些对象具有用户定义的赋值运算符,则它取决于实现和声明(返回类型)operator=.

通常,之后

(a = b)++
Run Code Online (Sandbox Code Playgroud)

对象a将递增.