2021没封的网站uc,张家港网站建设服务,wordpress关闭自动保存插件,搜索引擎优化的要点文章目录 函数参数缺省函数参数缺省的条件和要求 内联函数内联函数的工作原理内联函数的定义方法内联函数的要求解决方法#xff1a;直接在.h中定义内联函数的函数体 内联函数再Debug模式下默认是不展开的 函数参数缺省
顾名思义#xff1a;可以少传一个/多个参数给函数直接在.h中定义内联函数的函数体 内联函数再Debug模式下默认是不展开的 函数参数缺省
顾名思义可以少传一个/多个参数给函数但是该函数还能正常运行 例
不像C语言中函数定义了几个参数就必须传几个参数函数才能工作 函数参数缺省的条件和要求 必须在声明或者定义时给形参一个默认值 如 这样函数在参数缺省的时候就可以用形参的默认值工作再有参数传入时从左往右把默认值覆盖 给函数的形参默认值时必须从右往左给【即右边的有默认值了才能给左边的形参默认值】 例 这样可以 但是这样不行 为什么呢 因为函数形参接收参数是从左往右接收的所以左边的形参先接收到参数如果少传了参数参数就会被左边的形参数接收完毕此时如果右边的形参没有默认值函数就工作不了了 给函数默认值时不能跳着给 函数给默认值时如果函数有声明就必须在声明时给默认值定义时不能再给 例 内联函数
内联函数是用空间换取时间的函数
注意内联函数是程序员对编译器的建议
如果程序员设定的内联函数的函数体太长编译器就可能不会将它作为内联函数还是将它视为普通函数 内联函数的工作原理
①把函数实现放在代码区不放在栈区 即把函数的函数体展开在代码里有点类似宏函数的展开
②把函数时间放在了代码区就不用传参 去掉了传参的时间。 也省去了操作系统给栈区函数的形参分配值的时间。
③不放在栈区实现操作系统就不用销毁回收空间去掉了操作系统回收空间的时间。 内联函数的定义方法
直接在函数定义//声明的返回值前一个关键字inline 即可 例
内联函数的调用方法和普通函数一样 内联函数的要求
函数体不能太长代码不能太多
为什么 假设一个内联函数的函数体为100行代码 它会被调用100000次每一次调用都会展开一次函数体到代码区去 那么它就会在代码区展开出100000*100行代码会有很多重复的代码
而且这些代码都会被存在最终的可执行程序中导致可执行程序的大小变大
而此时如果不用内联那存入可执行程序的代码就只有100000100行代码
其中100000行代码都是调用该函数的代码100行代码是该函数的函数体
因为普通函数的函数体在栈中每次调用时都会开辟栈区空间再栈区空间中执行函数体每次调用函数都是重复使用那函数的100代码
函数体里面不能有递归调用
因为内联函数每次调用都要在调用位置展开内联函数的函数体 而编译器不知道递归什么时候能结束就不知道会展开多少次所以编译器不会接受把递归函数做内联函数
内联函数声明和定义不能分离在不同文件中【在同一文件中可以】 例 普通函数是可以分离的 内联函数不能分离
为什么呢
因为内联函数是不进编译链接时的符号表的也没有地址
所以链接时找不到 解决方法直接在.h中定义内联函数的函数体
因为被包含的头文件会在预处理时展开所以包含了头文件的文件就内使用该头文件中定义的东西 不了解编译和链接的可以看我这篇文章c语言编译和链接
例 内联函数再Debug模式下默认是不展开的
因为展开了就和宏一样不方便调试