哪一个更快?类函数或带有类指针的函数?

时间:2013-02-06 16:17:03

标签: c++ class pointers

在我的程序中,我使用了几个类和大量函数。我想知道哪一个会更快地工作,或者它们之间在速度方面没有区别。

1st:Class function

class mex{
  public:
    int length,nof_evaluations,nof_fast_evaluations;
    tree T;
    calc_mex(vector<string>,vector<double>);
}; 

将由

调用
mex m;
vector<string> v1;
vector<double> v2;
m.calc_mex(v1,v2);

2nd:具有类指针的函数

class mex{
  public:
    int length,nof_evaluations,nof_fast_evaluations;
    tree T;
}; 
calc_mex(mex*,vector<string>,vector<double>);

将由

调用
mex m,*mptr;
mptr=&m;
vector<string> v1;
vector<double> v2;
calc_mex(mptr,v1,v2);

我正在使用我的程序中的两种方式,但更倾向于方式1,因为它看起来更干净,更有条理。我也在一次运行程序中调用这些类型的函数100K次。所以我想知道他们中的任何一个是否能更好地适应时机。

谢谢!

3 个答案:

答案 0 :(得分:5)

而不是加速决定因素应该是函数逻辑上是否属于类。如果是,请将其作为会员。如果没有使它成为一个独立的功能。

BTW每个成员函数都隐式传递了this指针,因此两个版本之间没有太大区别。如果你真的关心性能。制作一个包含两个版本的示例程序,并在您的环境中使用大型数据集对其进行概要分析。

答案 1 :(得分:3)

我的回答是Alok给出的答案,我必须重申Donald Knuth的一个声明(他很有名,所以声明必须是真的,显然......):

  

程序员浪费了大量时间来考虑或担心程序中非关键部分的速度,而这些效率尝试实际上在考虑调试和维护时会产生很大的负面影响。我们应该忘记小的效率,大约97%的时间说:过早优化是所有邪恶的根源。然而,我们不应该把这个关键的3%的机会放弃。

我在这个问题上的两分钱:测量一些东西,直到你非常确定你的“优化”会使程序受益。否则,随着时间的推移,您倾向于生成更难以理解且无法维护的代码......

答案 2 :(得分:1)

在C ++中,所有成员函数(除非它们是虚函数)都是独立函数,其中“this”作为第一个参数传入。选择一个而不是另一个,你不会获得任何速度增益,它们都只是函数调用。