创建 class 对象然后调用函数与使用带范围解析运算符的静态函数的性能差异

Performance difference of making class object then calling function vs using static function with scope resolution operator

如果这样做,是否存在性能差异(无论大小,内存和速度都会被考虑):

ClassA a;
a.functionb();

对比这个:

ClassA::functionb();

Is there a performance difference

视情况而定。如果程序是优化的,并且 class 是无状态的,如果它没有用户定义的构造函数或析构函数,并且实例具有自动存储持续时间或者是临时的,并且不涉及间接寻址 - 即所有事情都是相等 - 那么我看不出性能会有差异的原因。

您可以通过测量发现实践中是否存在显着的性能差异。

这取决于创建 class 对象的成本。

如果这个便宜,没有区别。 This example 编译为完全相同的二进制文件,因此具有相同的执行速度。

class Foo{
    public:
    static int bar() {return 1;}
};

class Foo2{
    public:
    static int bar() {return 1;}
};



int main () {
   //return Foo::bar();
   Foo2 foo ;
   return foo.bar();
}

一般说明:如果您关心性能,首先要做的是设置时间测量并检查您的热点位置。这可以使用 perfvTune 等工具来完成。确保使用编译器的高优化级别 (-O3)。