void函数没有arg与argh的returing函数

时间:2016-09-19 17:52:16

标签: performance return local private void

说你必须在c ++ / java中编写sw代码,你会选择以下两种方式来实现大部分功能吗?

void function(){
  //code which uses private/public class variables
  //it modifies directly variable outside of the function
}

xyztype function(a,b,c,d){
  //code which uses local variables and args
  xyztype xyz;
  return xyz;
}

我的问题是:

1. Performance
2. Good practice in terms of perfomance

我不关心可读性/可用性或类似的东西。 在学校,我们习惯于第二种方式编码,但现在我倾向于使用第一种方法的9/10倍。 显然局部变量更快,但如果我有40个函数作用于5个变量怎么办?在当地解决所有问题可能会适得其反

1 个答案:

答案 0 :(得分:0)

性能并不总是首先要处理的(而您的代码并不是性能关键)。 对于认真的项目,您希望您的代码清晰明了,并遵循特定的范例,以便以后的开发变得容易 访问全局变量的函数用于过程编程范例(如在pascale,assembly ...中),如果您遵循该方法,稍后添加一些代码将非常困难,这就是为什么建议使用Object面向编程。

过程是一个没有返回值的函数,所以这就是你所说的。

关于传递参数,你并不是真的想让函数接入全局变量有很多原因:

  • 您想要编写一次函数并稍后将其移植到全局变量具有不同名称的其他项目中。
  • 您希望函数调用后跟一个变量列表,以便您了解当您想要进行一些更改时函数的作用。

    考虑这个例子,要旋转一个线段,有两种可能性,将其旋转到平面中的一个点上,或者在它的中心上旋转,但使用该方法的两个函数调用都将如下所示&#39 ; roate_line()' 所以你无法猜到这一点。

  • 另一个原因是您可以使用该函数仅对特定变量集应用更改,并且您的代码不会是动态的,您实际上必须为每组变量实现一个函数应用相同类型的治疗,(10个功能旋转10段!!!)

但是谈论性能,传递参数是通过堆栈完成的,每个传递的参数都需要推送和弹出指令以及内存访问,所以基本上要慢一点(基于堆栈的计算机 - 就像大多数现代的计算机一样 - 实际上非常非常快速做到这一点),所以你不会真正注意到差异,注意到许多程序员通过传递结构的指针来解决问题,因此只传递一个变量(地址)而不是整个结构