我应该在频繁使用的函数上使用“inline”吗?

Should I use `inline` on heavily used functions?

本文关键字:inline 我应该 函数      更新时间:2023-10-16

我有一个类cnVector,它表示三维空间中的一个点。它的操作符+ - */被大量使用。
它们的实现非常短:

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

我的问题是,因为这个函数很短,我应该内联它,虽然它的密集使用?或者当使用时,它会生成太多的代码吗?

是的,你可能应该这样做。内联关键字在c++中的良好用例是:小函数,大量使用。

参见http://msdn.microsoft.com/en-us/library/1w2887zk%28v=vs.80%29.aspx

请记住,使用内联从来不是保证,它只是给编译器一个提示。我怀疑内联实际上会增加很多可执行文件的大小,函数本身非常小。
调用函数的大小几乎和函数本身一样大

inline应用于所有函数,以避免违反一个定义规则。顺便说一下,这与内联完全无关,尽管有关键字名称。(或者把它们放在一个匿名的命名空间中。)

inline 给了编译器一个内联调用说的函数的提示,但正如注释所指出的编译器是相当有能力计算出自己,所以关键字是不需要的。

编译器完全有能力根据所选择的优化配置文件来决定是否内联函数。

如果编译器不这样做,您应该内联函数,并且使用实际数据集进行分析表明您在函数中花费了大量时间,使用所述函数的算法是有效的,并且如果内联它在使用所述数据集的基准测试中显示速度提高。

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