好的,这就是我想要的:
现在,我正在考虑以下情况:
Bitmap* myBitmap = newBitmap(1010);
,并使用其内部方法对其进行操作(例如myBitmap->getFirstBitSet()
)现在,哪种方法最快?直接简单函数和类封装static
函数之间是否真的有区别?还有什么其他可能更好的方案,我没有提到过?
旁注:我正在使用clang++
编译器,适用于Mac OS X 10.6.8。 (如果这有任何区别)
答案 0 :(得分:19)
在CPU级别,只有one kind of function,它非常重新组合C类。你可以自己制作,但是......
事实证明,C ++正在高效构建,将大多数函数直接映射到调用指令:
this
参数所有这3个人都有完全相同的表现。
另一方面,virtual
方法有轻微的开销。有一个关于性能的C ++技术报告,估计与非虚拟方法相比,空函数的开销在10%到15%之间(来自内存)。意味着对于内部有肉的任何功能(即,做实际工作),开销本身就接近于在噪音中迷失。除非virtual
调用可以在编译时推断,否则实际成本来自内联的抑制。
答案 1 :(得分:4)
经典的旧C函数和类的静态方法之间绝对没有区别。区别仅在于美学。如果您有多个C函数,它们之间有某种关系,您可以:
差异将再次审美。这很可能会提高可读性。
如果这些C函数共享一些静态数据,那么将该数据定义为类的私有静态数据成员是有意义的(如果可能)。在这种情况下,具有类的变体优于具有命名空间的变体。
我不鼓励你创建一个虚拟实例。这会误导源代码的读者。
为每个位图创建一个实例是可能的,甚至可能是有利的。特别是如果在典型场景中多次调用此实例上的方法。