VB.NET中函数的默认返回值是否必然分配给变量?
- 内容介绍
- 文章标签
- 相关推荐
本文共计429个文字,预计阅读时间需要2分钟。
我对如何实现名称与函数相同默认变量的兴趣在于,不使用`Sum`的情况下,是否总会分配变量。例如,如果我选择另一个变量(如CASE 3中的总数),是使用`Sum`还是其他方式?
编译时,以下三个等价案例是否也被考虑在内?
我对如何实现名称与函数相同的默认变量感兴趣.>即使我不使用Sum,总是会分配吗? (见案例1)
>如果我选择另一个变量(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似乎更有效,因为它将运算符的结果直接放到堆栈上.其他人必须将结果从堆栈中拉入局部变量,然后将其推回堆栈!
本文共计429个文字,预计阅读时间需要2分钟。
我对如何实现名称与函数相同默认变量的兴趣在于,不使用`Sum`的情况下,是否总会分配变量。例如,如果我选择另一个变量(如CASE 3中的总数),是使用`Sum`还是其他方式?
编译时,以下三个等价案例是否也被考虑在内?
我对如何实现名称与函数相同的默认变量感兴趣.>即使我不使用Sum,总是会分配吗? (见案例1)
>如果我选择另一个变量(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似乎更有效,因为它将运算符的结果直接放到堆栈上.其他人必须将结果从堆栈中拉入局部变量,然后将其推回堆栈!

