我想知道这在中是否曾经是或现在仍然是一种情况。网
使用exp+=val而不是exp=exp+val。由于exp可以任意复杂,这可能导致大量不必要的工作。这强制JIT评估exp的两个副本,并且很多时候这是不需要。第一个语句可以比其次,因为JIT可以避免对exp求值两次。
这来自代码项目中的一篇古代文章。
cpp中还有另一个:
但是,复合赋值表达式并不等价于扩展版本,因为复合赋值表达式计算expression1仅一次,而扩展版本计算expression1两次:在加法运算和赋值中活动
是的,它过去是,现在仍然是中的最佳实践。NET。要在中添加4的图像
myObject.MyExpensiveMethod().MyProperty
显然你不想做:
myObject.MyExpensiveMethod().MyProperty =
myObject.MyExpensiveMethod().MyProperty + 4;
因为它调用昂贵的方法两次,而+=
只调用它一次。你可以做:
var temp = myObject.MyExpensiveMethod();
temp.MyProperty = temp.MyProperty + 4;
这是较少昂贵,但最便宜的做法:
myObject.MyExpensiveMethod().MyProperty += 4;
由于昂贵的方法只调用一次。
另一种情况是,当你使用一种只想调用一次的具有副作用的方法时:
myFactory.GetNextObject().MyProperty += 5;
你肯定不会做
myFactory.GetNextObject().MyProperty = myFactory.GetNextObject().MyProperty + 5;
您可以再次使用临时变量,但复合赋值运算符显然更简洁。
诚然,这些都是边缘案例,但这并不是一个坏习惯。