zoukankan      html  css  js  c++  java
  • 内联函数(inline function)

    关键词inline修饰的函数,叫作内联函数

    • 编译器将函数调用直接展开为函数体代码
    #include <iostream>
    using namespace std;
    
    inline void func() {
    	cout << "func()" << endl;
    }
    
    inline int sum(int v1, int v2) {
    	return v1 + v2;
    }
    
    int main() {
    	func();
    
    	int c = sum(10, 20);
    	cout << c << endl;
    
    	getchar();
    	return 0;
    }
    
    • 搜一下跳转地址,发现确实是直接展开为函数体代码

    一旦变成内联函数时,一有调用就会不停的替换(展开);而一般的函数,函数的实现只有一份

    *一下被替换,展开为四份

    一般函数调用开始时开辟栈空间,结束时回收;内联函数直接展开,不存在函数调用(cout << "func()" << endl;直接执行这个操作)

    • 可以减少函数调用的开销;会增大代码体积
    inline void func() {            
    	cout << "func()" << endl;    //一般的函数这里只保留一份
    }
    
    int main() {
    	func();            //替换为这一句cout << "func()" << endl;
            func();            //替换为这一句cout << "func()" << endl;
            func();            //替换为这一句cout << "func()" << endl;
    	func();            //替换为这一句cout << "func()" << endl;
    
    	getchar();
    	return 0;
    }
    

    什么时候使用内联

    1.函数代码体积不大
    2.经常调用的函数
    3.尽量不要内联超过10行代码的函数
    4.有些函数即使声明为inline,最终编译器也不一定把它变成内联,比如递归函数
    5.inline是尽量建议编译器去优化

    VS看看内联的本质

    release x86模式:发布模式,编译器做最大优化
    不是内联函数也会变成内联
    如要要看见inline的区别,需要右键解决方案-属性-优化 禁止-内联函数扩展 改成任何适用项

    发现不存在调用函数call

    用IDA打开看,发现内联函数的声明与过程都不见了,直接把函数调用替换成函数里面的内容

    func();            //替换为这一句cout << "func()" << endl;
    

    内联函数与宏类似,都有一个替换。宏是文本替换。

    • 不要使用宏,使用内联
    #include <iostream>
    using namespace std;
    
    #define add(v1, v2) v1 + v2    //宏,左边替换成右边
    
    int main() {
    
    	int c = add(10, 20);
    
    	cout << c << endl;
    
    	getchar();
    	return 0;
    }
    

    c++表达式可以被赋值

    int a =1;
    int b =2;
    (a = b) = 4;    //赋值给了a
    
  • 相关阅读:
    CSS实现字母全大写
    人生职业规划与自身设想
    关于人生的一些想法,和淘客SEO的思想。
    保持积极向上的心态去把傻逼的坚持换成牛逼的结果
    SEO站群随想,及自我的认知和想法
    我是SEOer,我为自己代言
    打印出 html结构中的ul li
    js数据类型转换
    js object类型转换 内存泄漏 垃圾回收机制
    页面重置样式reset.css
  • 原文地址:https://www.cnblogs.com/sec875/p/12253745.html
Copyright © 2011-2022 走看看