c++基础学习3-c++中的函数a

来源:互联网 发布:文件收发管理系统源码 编辑:程序博客网 时间:2024/04/28 21:20

1,内联函数

      1,  c++中推荐使用内联函数代替宏代码片段

      注意内联函数声明时inline关键字必须和函数定义结合在一起(不是声明),否则编译器会忽略内联请求。

       2,c++在最终生成的代码中是没有定义的。

       3,c++编译器直接将函数体插入函数调用的地方、由预处理器处理,进行简单的文本替换,没有编译

       4,内联函数没有普通函数调用时的额外开销

       5,内联函数式对编译器的一种请求,编译器可能会拒绝

首先来看一个例子

同过这两个对比你发现了什么?

原来宏并不是在什么情况下都可以用的,这个时候内联函数的作用就显而易见了,所以说内联函数也很安全。

       6,现代c++编译器能够在编译的时候进行编译优化,即使一些函数没有inline声明,也可能被编译器内联编译。

(一些c++编译器提供拓展语法,能对函数进行强制内联       如: __attribute__((always_inline))    )


c++内联编译的限制

    1,不能存在任何形式的循环语句。

   2,不能存在过多的条件判断语句。

   3,函数体不能过于庞大。

   4,不能对函数进行取址操作。

   5,必须先声明内联,才能调用。

之所以有这些限制,是因为,函数体有循环或者判断语句时,执行需要的时间远大于压栈以及返回跳转的时间,那么我们将它声明为内联函数也几乎没意义。


内联函数的机制

首先编译器编译到函数体时,如果发现有内联声明,首先会判断一下这个函数是否符合内联编译的条件,如果满足条件,c++编译器会将它放入符号表。之后对其参数类型进行检查,如果通过,就到符号表中将函数体取出,替代代码的函数体。


2,函数的默认参数

    c++中可以再函数声明时为参数提供一个默认值,当函数调用时没有指定这个参数的值,编译器会自动用默认值代替。

如果我们给val函数内的参数a默认设置为0,那么当你调用这个函数时,如果不指定这个参数的值,编译器会用默认值代替。



那么我们需要的参数是什么样子的呢?

1,一旦在一个函数调用的时候开始使用了默认参数值,那么这个参数后的所有参数都必须使用参数默认值。


3,函数占位参数

站位参数

   1,站位参数只有参数类型声明,而没有参数名声明。

   2,一般情况下,在函数体内部无法使用站位参数。

  

那么c++支持这样的参数究竟有什么意义?

  我觉得是其一,方便以后修改或添加新功能,其二,继续支持c语言,如果出现c中的无参函数例如f()这样的无参函数,在们调用的时候,那么站位参数就有用了。



0 0