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
    
  • 相关阅读:
    上传图片,将图片保存在腾讯云(2种方式)
    由ping所引发的思考~
    php面试上机题(2018-3-3)
    【八】jqeury之click事件[添加及删除数据]
    【七】jquery之属性attr、 removeAttr、prop[全选全不选及反选]
    【六】jquery之HTML代码/文本/值[下拉列表框、多选框、单选框的选中]
    【五】jquery之事件(focus事件与blur事件)[提示语的出现及消失时机]
    小白懂算法之基数排序
    mysql_sql199语法介绍
    Python基本编程快速入门
  • 原文地址:https://www.cnblogs.com/sec875/p/12253745.html
Copyright © 2011-2022 走看看