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()这样的无参函数,在们调用的时候,那么站位参数就有用了。
- c函数声明--基础学习
- 【C语言学习】C语言中的函数
- c++基础学习3-c++中的函数a
- C语言基础学习——第3天(函数)
- c语言基础学习中。。函数
- C++primer学习笔记-----6.1函数基础
- C++primer学习-vector中的erase函数
- C++primer学习-list中的erase函数
- C语言中的函数指针学习讲解
- 【C#】 学习C# 中的时间函数
- 【基础C&C++】内存函数
- C 基础 (函数)
- C基础:函数
- C语言基础 函数
- C语言基础 函数
- C函数指针基础
- C基础中的知识点
- c总结3 --- C语言中的strstr函数(指针学习2)
- linux添加环境变量的方法总结
- Android 调用WebAPI
- HBase 学习一: 客户端写缓冲区 autoFlush
- android bitmap 缓存工具类
- Centos设置静态IP
- c++基础学习3-c++中的函数a
- Cocos2dx 配置的环境需求
- 动态规划:矿工模型
- my_itob
- POJ 2451 Uyuw's Concert
- TortoiseSVN日常使用指南
- ORACLE WEBADI 开发示例
- POJ 3740 Dancing Links
- 2.git学习分享--常见命令大全