c++中带self的复合赋值操作符
Compound assignment operators with self in C++
要计算2.0
的平方,代码
double a = 2.0;
a *= a;
有良好定义的行为?
这是合法的,因为(c++ 11,§1.9/15):"操作符的操作数在值之前排序运算符"or"的结果的计算(c++ 03,§5/4):在前一个和下一个序列点之间有一个标量对象其存储值最多只能被修改一次表达式的求值。此外,先验值应为只能在确定要存储的值时访问。"(在a *= a
,左侧的a
只能访问以确定要存储的值。并对a
进行了评价左边是"值计算",没有副作用。
是的。
认为相反的唯一理由是序列点的问题,但这并不适用于这里。
1)在前一个序列点和下一个序列点之间,标量对象的存储值最多只能被表达式的求值修改一次。
只要修改一次就可以了
相关文章:
- C 复合赋值运算符 ^= 平均值
- 复合赋值运算符C++概念
- 在未初始化的变量上使用复合赋值运算符(+=, ..)不是C++中的UB?
- 复合赋值运算符是否不如 C++ 精确?
- 重载C++中的复合赋值运算符
- C++中重载复合赋值运算符不会更改变量
- 复合赋值的左侧表达式是未初始化的值.计算出的值也将是垃圾
- 枚举的复合赋值运算符真的应该根据其关联的算术运算符来定义吗?
- C++ 布尔复合赋值线程安全
- 复合赋值运算符重载
- gcc 的 -Wconversion 是否与使用比 int 短的整数类型的复合赋值(+= 等)不兼容?
- 在复合赋值运算符中强制转换
- 复合赋值到布尔值安全吗?
- 重载复合赋值运算符
- 复合赋值和添加运算符重载
- 使用复合赋值运算符解决转换警告
- 复合赋值运算符的类型/类型转换?(例如*=(星形等于))
- 使用重载复合赋值操作符时的运行时错误
- c++中带self的复合赋值操作符
- 为什么重载复合赋值操作符可以是非成员函数