gpt4 book ai didi

vb.net - 是否总是分配函数的默认返回变量?

转载 作者:行者123 更新时间:2023-12-04 18:40:11 25 4
gpt4 key购买 nike

我对如何实现与函数名称相同的默认变量感兴趣。

  • Sum即使我不使用它也总是分配? (见 case 1)
  • 如果我选择另一个变量( Total in CASE 3 ),是否使用它代替 Sum ?

  • 以下 3 种等效情况在编译时是否也等效?还是有些人优于其他人?
    ' EQUIVALENT CASES

    ' CASE 1
    Function Sum(a As Integer, b As Integer) As Integer
    Return a + b
    End Function

    ' CASE 2
    Function Sum(a As Integer, b As Integer) As Integer
    Sum = a + b
    End Function

    ' CASE 3
    Function Sum(a As Integer, b As Integer) As Integer
    Dim Total As Integer
    Total = a + b
    Return Total
    End Function

    正如我在某处读到的,编译为小于 32 字节的函数被内联插入。我想知道在某些情况下,我是否可能会因为所选择的符号而高于或低于限制。

    最佳答案

    我将您的函数分别重命名为 Sum1、Sum2 和 Sum3,然后通过 LinqPad 运行它们。这是生成的IL:

    Sum1:
    IL_0000: ldarg.1
    IL_0001: ldarg.2
    IL_0002: add.ovf
    IL_0003: ret

    Sum2:
    IL_0000: ldarg.1
    IL_0001: ldarg.2
    IL_0002: add.ovf
    IL_0003: stloc.0 // Sum2
    IL_0004: ldloc.0 // Sum2
    IL_0005: ret

    Sum3:
    IL_0000: ldarg.1
    IL_0001: ldarg.2
    IL_0002: add.ovf
    IL_0003: stloc.1 // Total
    IL_0004: ldloc.1 // Total
    IL_0005: ret

    看起来 Sum2 和 Sum3 导致相同的 IL。 Sum1 似乎更有效,因为它将运算符的结果直接放入堆栈。其他人必须将结果从堆栈中提取到局部变量中,然后将其推回到堆栈中!

    关于vb.net - 是否总是分配函数的默认返回变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28069622/

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