c++中带self的复合赋值操作符

Compound assignment operators with self in C++

本文关键字:复合 赋值操作符 self 中带 c++      更新时间:2023-10-16

要计算2.0的平方,代码

double a = 2.0;
a *= a;

有良好定义的行为?

这是合法的,因为(c++ 11,§1.9/15):"操作符的操作数在值之前排序运算符"or"的结果的计算(c++ 03,§5/4):在前一个和下一个序列点之间有一个标量对象其存储值最多只能被修改一次表达式的求值。此外,先验值应为只能在确定要存储的值时访问。"(在a *= a,左侧的a只能访问以确定要存储的值。并对a进行了评价左边是"值计算",没有副作用。

是的。

认为相反的唯一理由是序列点的问题,但这并不适用于这里。

1)在前一个序列点和下一个序列点之间,标量对象的存储值最多只能被表达式的求值修改一次。

只要修改一次就可以了