函数的几种变体

inline 函数

  • inline 函数是内联函数,是编译期优化的一种手段,一般是直接展开到调用者代码里,减少函数堆栈的开销。
  • inline 标识只是建议,并不是一定开启内联。
  • 函数比较复杂或者递归有可能编译期不展开。
  • dll 导出的时候,可以不用加导出标识,会直接导出到目标处。
  • inline 在msvc的平台,只要实现头文件中,加不加内联是一样的. (警告顶级调到最高/Wall, 不加inline标识的函数会提示,未使用的内联函数将被删除。)
  • inline 函数比全局函数更快,但是全局函数无法定义在头文件中(会报多重定义函数。)所以一般用class 包一层 static inline 函数,用来写工具类。

函数对象

class A {
public :
    int value;  
    int operator() (int val) {
        return value + val;
    }
}

上述代码是一个函数对象,重载operator()得到一个函数对象。
int a = A{10}(1) 会返回11, 显示构造了一个A{value=10}的对象,然后调用重载函数operator(), 返回 10 + 1 = 11
上述代码因为是在头文件实现的,所以编译期会自动把operator()函数当成inline函数,执行效率很高。

lambda 函数

lambda 其实就是一个函数对象,会在编译期展开成一个函数对象体。

版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《函数的几种变体》
文章链接:https://zhuji.vsping.com/3356.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。