我应该在大量使用的函数上使用`inline`吗?

时间:2011-10-23 17:55:48

标签: c++ inline

我有一个类cnVector,代表三维空间中的一个点。 其操作员+ - * /被密集使用 他们的实施很短:

cnVector cnVector::operator + (const cnVector& v) const {
    return cnVector(
        x + v.x,
        y + v.y,
        z + v.z );
}

我的问题是,因为这个功能很短,我应该内联它,尽管它的密集使用?或者在使用 时会产生太多代码吗?

5 个答案:

答案 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)

如果有疑问,请使用和不使用内联编译它,并比较执行速度和大小。编译器通常提供一个用于分析的开关,如上所述,以查看函数调用的成本,及时测量,