如果您这样做,是否会有性能差异(内存和速度都被考虑,无论大小):
ClassA a;
a.functionb();
vs:
ClassA::functionb();
这取决于创建类对象的开销。
如果这个便宜,没有区别。此示例编译为完全相同的二进制文件,因此具有相同的执行速度。
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();
}
总论:如果你关心性能,首先要做的是设置一个时间测量并检查你的热点在哪里。这可以使用perf
或vTune
之类的工具来完成。请确保使用高优化级别的编译器(-O3
)。
是否存在性能差异
取决于细节。如果程序被优化,类是无状态的,如果它没有用户定义的构造函数和析构函数,并且实例具有自动存储持续时间或是临时的,并且没有间接涉及-即所有条件相等-那么我看不出为什么会有性能差异的原因。
您可以通过测量来发现在实践中是否存在显著的性能差异。