C++ inline

C++ inline函数

1 int big(int a, int b) {
2     return a > b ? a : b;
3 }


上面是求两个数中较大者的函数,当然我们可以在任意使用big(a, b)的位置用如下这句话代替:(a > b ? a : b).

把这种小操作定义为函数的优缺点如下:
优点:
1. 阅读和理解函数的调用比读懂等价的表达式容易。
2. 使用函数可以确保行为的统一,每次相关操作都能保证按照同样的方式进行。
3. 修改函数比修改所有位置的等价表达式更容易。
4. 函数可以被其他应用重复利用,省去了编码的代价。
缺点:
1. 调用函数比求等价的表达式慢。
函数调用包含一系列工作:调用前要先保存寄存器,并在返回时恢复;可能需要拷贝实参;程序转向一个新的位置继续执行。

内联函数可避免函数调用的开销
将函数指定为内联,通常就是将它在每个调用“内联地”展开。假设吧big函数定
义为inline,则如下调用
cout << big(a, b) << endl;
在编译过程中展开成类似于下面的形式
cout << (a > b ? a : b) << endl;

1、内联函数对于编译器来说只是一个建议,编译器可以选择忽略这个建议。
2、内联函数应该在头文件中定义,这一点不同于其他函数。
3、在头文件中加入或者修改内联函数时,使用了该头文件的所有源文件都必须重新编译。
4、内联函数的定义对编译器而言必须是可见的,以便编译器能够在调用点内联展开该函数的代码。
5、为了使得inline声明内联函数有效,我们必须将inline关键字与函数体放在一起才行,否则inline关键字是不能成功将函数声明内联函数的。

更多:https://zh.wikipedia.org/wiki/%E5%86%85%E8%81%94%E5%87%BD%E6%95%B0

转载于:https://www.cnblogs.com/ykzou/p/4982486.html

### C++ 中 `inline` 关键字的用法与最佳实践 #### 定义与作用 在 C++ 中,`inline` 关键字用于建议编译器将函数定义为内联函数。这意味着当调用该函数时,编译器可能会将其替换为实际的函数体代码,从而减少函数调用开销并提高性能[^1]。 然而需要注意的是,`inline` 只是一个提示而非强制命令;最终决定权在于编译器优化策略。如果函数过大或者复杂度较高,则即使标记为 `inline`,也可能不会被真正内联化。 #### 使用场景 通常情况下,只有那些非常简单、执行时间短且频繁使用的函数才适合声明为内联函数。对于较大的方法实现部分不应该直接嵌入到类定义内部,除非它们极其基础或是出于性能考虑而设计得极为紧凑简洁的小型辅助功能模块。 另外,在跨平台开发过程中涉及到未托管代码(unmanaged code)交互时,考虑到不同编程环境下的兼容性问题以及微软关于结构体型大小不超过 16 字节 的推荐标准等因素,合理选用合适的数据传递方式变得尤为重要。在这种背景下,采用基于对象实例化的操作模式往往能够更好地满足多语言支持需求,并提供更加灵活便捷的应用接口给终端使用者[^2]。 #### 示例代码展示 下面给出一段简单的例子来说明如何正确运用 `inline`: ```cpp // 正确的做法:只对小型、常驻内存中的计算逻辑应用 inline class MathUtils { public: static inline int square(int value) { return value * value; } // 合适的候选者 private: double piApproximation; }; int main() { cout << "Square of 5 is: " << MathUtils::square(5); } ``` 上述案例展示了在一个工具性质较强的静态成员函数上加注 `inline` 是恰当合理的做法之一,因为它的业务处理流程较为单一明了而且重复利用率高。 #### 性能考量及其他注意事项 尽管适当使用 `inline` 能够带来一定层面上的效率提升,但过度依赖它反而可能导致可读性和维护难度增加等问题出现。因此,在具体项目实践中应当遵循如下原则: - 避免把过长或复杂的算法封装成所谓的 “Inline Function”; - 对于那些仅存在于头文件内的自由形式(non-member) 函数同样可以附加此属性以便促进潜在的机会共享同一份副本以节省空间资源消耗; - 如果某个特定版本之后引入的新特性已经包含了隐式的内建机制(比如现代编译技术自动识别热点路径),那么显式指定可能就显得多余甚至干扰正常工作流了。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值