我应该在频繁使用的函数上使用“inline”吗?
Should I use `inline` on heavily used functions?
我有一个类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
也给了编译器一个内联调用说的函数的提示,但正如注释所指出的编译器是相当有能力计算出自己,所以关键字是不需要的。
编译器完全有能力根据所选择的优化配置文件来决定是否内联函数。
如果编译器不这样做,您应该内联函数,并且使用实际数据集进行分析表明您在函数中花费了大量时间,使用所述函数的算法是有效的,并且如果内联它在使用所述数据集的基准测试中显示速度提高。
如果有疑问,请使用和不使用内联编译它,并比较执行速度和大小。编译器通常提供如上所述的分析开关,以查看函数调用的成本(按时间衡量)
相关文章:
- 我应该使用什么来代替void作为变体中的替代类型之一
- boost::asio::steady_timer()与sleep()我应该使用哪一个
- 我应该实现右值推送功能吗?我应该使用std::move吗
- 我是C++编程的新手,这些代码之间有什么区别,我应该使用哪一个
- 我应该删除矢量<short>吗?
- 我应该如何修改此代码以使用给定字符串中的字母打印菱形图案
- 我应该在锁定TBitmap画布后解锁它吗
- 为什么我应该在异常处理中使用std::cerr而不是std::cout
- 我应该避免多重实现继承吗
- 为了方便起见,我应该避免公开私有字段变量吗
- 我收到同义重复编译器错误。我应该如何修复"类型"X"的参数与类型"X"的参数不兼容?
- 违反const正确性:我应该现实地期待什么问题
- 我应该如何表示我拥有的连续元素序列?
- 我应该将除 .cpp 以外的其他文件添加到 git 中吗?
- 我应该如何从 stdin C++ 中读取可变长度的格式字符串?
- 我有一个对象,它将在整个程序的持续时间内实例化,但一个类成员不会,我应该动态分配它吗?
- 我应该如何捕捉out_of_range异常?
- 我应该声明所有不抛出 noexexcept 的成员/函数吗?
- OpenCV 我应该使用智能指针来防止内存泄漏吗?
- 我应该在频繁使用的函数上使用“inline”吗?