gpt4 book ai didi

vb.net - x = x + 1与x + = 1

转载 作者:行者123 更新时间:2023-12-03 08:59:03 24 4
gpt4 key购买 nike

我的印象是这两个命令的结果相同,即X递增1,但后者可能更有效。

如果不正确,请说明差异。

如果正确的话,为什么后者应该更有效?他们不应该都编译成相同的IL吗?

谢谢。

最佳答案

MSDN library for +=


使用此运算符几乎与指定result = result + expression相同,只是结果只被评估一次。


因此它们并不相同,这就是为什么x + = 1会更有效。

更新:我只是注意到我的MSDN Library链接是到JScript页面的,而不是VB page,它不包含相同的引号。

因此,根据进一步的研究和测试,该答案不适用于VB.NET。我错了。这是一个示例控制台应用程序:

Module Module1

Sub Main()
Dim x = 0
Console.WriteLine(PlusEqual1(x))
Console.WriteLine(Add1(x))
Console.WriteLine(PlusEqual2(x))
Console.WriteLine(Add2(x))
Console.ReadLine()
End Sub

Public Function PlusEqual1(ByVal x As Integer) As Integer
x += 1
Return x
End Function

Public Function Add1(ByVal x As Integer) As Integer
x = x + 1
Return x
End Function

Public Function PlusEqual2(ByVal x As Integer) As Integer
x += 2
Return x
End Function

Public Function Add2(ByVal x As Integer) As Integer
x = x + 2
Return x
End Function

End Module


PlusEqual1和Add1的IL确实相同:

.method public static int32 Add1(int32 x) cil managed
{
.maxstack 2
.locals init (
[0] int32 Add1)
L_0000: nop
L_0001: ldarg.0
L_0002: ldc.i4.1
L_0003: add.ovf
L_0004: starg.s x
L_0006: ldarg.0
L_0007: stloc.0
L_0008: br.s L_000a
L_000a: ldloc.0
L_000b: ret
}


PlusEqual2和Add2的IL也几乎相同:

.method public static int32 Add2(int32 x) cil managed
{
.maxstack 2
.locals init (
[0] int32 Add2)
L_0000: nop
L_0001: ldarg.0
L_0002: ldc.i4.2
L_0003: add.ovf
L_0004: starg.s x
L_0006: ldarg.0
L_0007: stloc.0
L_0008: br.s L_000a
L_000a: ldloc.0
L_000b: ret
}

关于vb.net - x = x + 1与x + = 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/808062/

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