【问题标题】:How Function overloading saves memory [closed]函数重载如何节省内存[关闭]
【发布时间】:2013-04-03 07:34:58
【问题描述】:

函数重载如何节省内存?

以下两种函数定义有什么区别,应该使用哪一种?

1)

ADD(a,b)
ADD(a,b,c)
ADD(a,b,c,d)

2)

AddTwoNumbers(a,b)
AddThreeNumbers(a,b,c)
AddFourNumbers(a,b,c,d)

【问题讨论】:

  • 从您得到的答案来看,每个人似乎都假设所有三个函数都在执行一个 ADD 函数,但参数数量不同。但情况不一定如此。尽管看起来不太可能,这三个功能,无论名称如何,都可能在做三项不同的工作。在这种情况下,后一种编码风格会更有意义。如果他们做的事情基本相同,那么前者更好。但正如大家已经提到的,它更像是一种编码风格,不应该有性能差异。

标签: c# c++ oop c#-4.0


【解决方案1】:

函数重载不会节省内存。

【讨论】:

    【解决方案2】:

    当我们编写重载方法时,它不会节省任何空间,也不会提高性能。它仅用于更好的可读性和实现多态性。

    【讨论】:

      【解决方案3】:

      函数重载如何节省内存。

      在运行时,它不会。 重载在编译时解决,因此对性能没有影响。

      以下两种函数有什么区别 定义,

      它们是重载函数,带有多个参数,IMO 会更易读

      应该使用哪一个?

      重载将更具可读性,(您可能还会看到Member Overloading - MSDN)但是如果您使用的是C# 4.0 或更高版本,那么您也可以使用optional parameters

      定义如下:

      public int ADD(int a, int b, int c = 0, int d = 0)
      {
          //..... your code
          return result;
      }
      

      这样称呼:

      ADD(2, 3);
      ADD(2, 3, 4);
      ADD(2, 3, 4, 5);
      

      【讨论】:

        【解决方案4】:

        嗯,区别在于名称;-)。 关于你应该使用哪一个...长名称使用更多字节的内存,但这在任何可以运行 C#-4 的系统中应该可以忽略不计,所以只使用你最喜欢的。

        我个人会使用:

        Add(a,b);
        Add(a,b,c);
        Add(a,b,c,d);
        

        XXXNumbers 与参数列表是多余的,因此它什么也不提供。

        而且全大写的版本很丑。

        【讨论】:

          【解决方案5】:

          顺便说一句,这些只是函数调用,而不是它们的原型/定义

          1)

          ADD(a,b)
          ADD(a,b,c)
          ADD(a,b,c,d)
          

          这些将充当重载函数

          2)

          AddTwoNumbers(a,b)
          AddThreeNumbers(a,b,c)
          AddFourNumbers(a,b,c,d)
          

          这三个将像三个不同的函数(未重载)。

          重载函数具有相同的函数名称和不同数量的参数。 在内部发生“名称修改”,编译器必须创建三个不同的函数。它在节省内存方面没有多大帮助,但提高了可读性

          【讨论】:

            【解决方案6】:

            函数重载永远不会节省空间,内部编译器会创建两个不同版本的函数,并且根据调用它会调用不同版本的函数。

            函数重载使您的代码更具可读性。

            1)
            
            ADD(a,b)
            ADD(a,b,c)
            ADD(a,b,c,d)
            
            2)
            
            AddTwoNumbers(a,b)
            AddThreeNumbers(a,b,c)
            AddFourNumbers(a,b,c,d)
            

            这类似于重载,但上面的代码更具可读性。

            【讨论】:

              最近更新 更多