gpt4 book ai didi

c# - 在 C# 中,x+=y 和 x=x+y(x 和 y 都是简单类型)之间是否存在任何性能差异?

转载 作者:行者123 更新时间:2023-12-05 06:51:13 25 4
gpt4 key购买 nike

<分区>

在 C/C++ 中,

The compound-assignment operators combine the simple-assignment operator with another binary operator. Compound-assignment operators perform the operation specified by the additional operator, then assign the result to the left operand. For example, a compound-assignment expression such as

expression1 += expression2

can be understood as

expression1 = expression1 + expression2

However, the compound-assignment expression is not equivalent to the expanded version because the compound-assignment expression evaluates expression1 only once, while the expanded version evaluates expression1 twice: in the addition operation and in the assignment operation.

(引自 Microsoft Docs)


例如:

  1. 对于i+=2;i会被直接修改而不创建任何新对象。
  2. 对于i=i+2;,首先会创建i的副本。复制的一个将被修改,然后被分配回i
        i_copied = i;
i_copied += 2;
i = i_copied;

如果没有编译器的任何优化,第二种方法将构造一个无用的实例,这会降低性能。


在 C# 中,不允许重载像 += 这样的运算符。和所有 simple types intdouble 被声明为 readonly struct(这是否意味着 C# 中的所有结构实际上都是不可变的?)。

我想知道在 C# 中,是否有某种表达式强制直接修改对象(至少对于简单类型),而不创建任何无用的实例。

此外,如果构造函数没有副作用,C# 编译器是否可以按预期将表达式 x=x+y 优化为 x+=y和解构器。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com