我有一个类cnVector
,代表三维空间中的一个点。
其操作员+ - * /被密集使用
他们的实施很短:
cnVector cnVector::operator + (const cnVector& v) const {
return cnVector(
x + v.x,
y + v.y,
z + v.z );
}
我的问题是,因为这个功能很短,我应该内联它,尽管它的密集使用?或者在使用 时会产生太多代码吗?
答案 0 :(得分:5)
是的,你可能应该这样做。 c ++中inline关键字的一个很好的用例是:小函数,大量使用。
另见http://msdn.microsoft.com/en-us/library/1w2887zk%28v=vs.80%29.aspx
答案 1 :(得分:5)
请记住,使用内联绝不是保证,它只是给编译器一个提示。我怀疑内联实际上会增加可执行文件的大小,功能本身很小。
调用函数的大小与函数本身几乎相同。
答案 2 :(得分:3)
将inline
应用于您在命名空间范围的标头中定义的所有函数,以避免违反One Definition Rule。顺便说一句,这与内联完全无关,尽管有关键字名称。 (或者将它们放在匿名命名空间中。)
inline
还给出了编译器内联对所述函数的调用的提示,但是正如评论指出的那样,编译器能够自行解决这个问题,所以关键字并不是真的需要它。
答案 3 :(得分:2)
编译器完全能够根据所选的优化配置文件决定是否内联函数。
如果编译器不能内联函数,并且使用实际数据集进行分析表明您在函数中花费了大量时间,则使用所述函数的算法是有效的,并且如果内联它显示了使用所述数据集的基准测试中的速度提升。
答案 4 :(得分:1)
如果有疑问,请使用和不使用内联编译它,并比较执行速度和大小。编译器通常提供一个用于分析的开关,如上所述,以查看函数调用的成本,及时测量,