C++基础知识(2)---函数
c++中的函数和C语言中的函数相比,增加了许多新的语法与功能。在这里总结一下c++中常用的引用函数,函数重载和内联函数。
1 引用参数
引用参数最常用的一个例子就是 交换 两个数,如下
void swap( int &a, int &b)
{
int t;
t = a;
a = b;
b = t;
} void main()
{
int f = ;
int s = ;
swap(f , s);
}
这俩个数的值被调换了。是什么原因呢?原来引用参数是利用了别名技术,在进行参数传递时,形式参数作为实际参数的别名绑定于实际参数上。函数中所进行的操作就直接在实际参数上操作。
还有一种交换俩个数的方法就是就是利用 指针 ,在c语言中是一个非常经典的例子:
void swap( int *a, int *b)
{
int t =*a;
*a = *b;
*b = t;
}
由于传递进来的是实际参数的地址,可以利用这个地址直接对该地址上存储的内容进行修改。因此就交换了俩个数的值。
引用参数还有一个作用是引用返回。当程序执行到return expression 这条语句时,会先将 expression 求值,然后将这个值复制到临时存储空间,最后再将临时存储空间中的这个值返回给调用者,我们称之为传值返回。而引用返回直接将expression 求得的值返回给调用者。如:
int& val()
{
.......
return i;
}
int j= val();
直接将i的值返回给j,没有经过临时存储空间。
值得注意的是,引用返回并不能返回非static类型的局部变量。因为引用返回,返回的是一个实际的内存单元,必须保证函数结束时,该内存单元仍然存在。
2 内联函数
内联函数必须用 inline 关键值来声明 ,如,
inline void print(string s = "hello world")
使用内联函数的目的是减少程序调用的开销,这是因为在调用内联函数的地方,编译器都会将之替换为函数体的代码。这与宏的使用有些相似,但是宏展开式在预处理阶段进行的,不涉及语义处理。但内联函数是由编译器处理的,需要考虑到语义。另外一点是c++中的函数允许使用默认的参数,如上例中,就使用了默认的参数,当发生函数调用时,如果没有传递函数就按照默认的参数来处理。
3 函数重载
在讨论函数重载之前,首先介绍一下函数签名的概念:函数签名包括 函数名称,参数个数,参数类型,参数顺序。exp:
int a(int f);
int b(int f);
以上俩个函数具有不同的函数签名,因为他们的名字不同。
int a();
int a(int f);
以上俩个函数具有不同的函数签名,因为他们的参数个数相同
int a(int f);
int a(double f);
以上俩个函数具有不同的函数签名,因为他们的参数类型不同
int a(itn f ,double s);
itn a(double s,int f);
以上俩个函数具有不同的函数签名,因为他们参数的顺序不同
double a(int s ,double d);
void a(int dd ,double ss);
以上俩个函数具有相同的函数签名,因为他们的函数签名相同。需要注意的是,函数的签名并不包括函数的返回值。
函数的重载存在于具有相同的函数名,具有不同的函数签名的函数之间,如下就是函数重载
void print();
void print(strign s);
函数重载的作用主要是为一些相似的操作提供相同的函数名。
C++基础知识(2)---函数的更多相关文章
- php面试笔记(5)-php基础知识-自定义函数及内部函数考点
本文是根据慕课网Jason老师的课程进行的PHP面试知识点总结和升华,如有侵权请联系我进行删除,email:guoyugygy@163.com 在面试中,考官往往喜欢基础扎实的面试者,而函数相关的考点 ...
- [C/C++基础知识] main函数的参数argc和argv
该篇文章主要是关于C++\C语言最基础的main函数的参数知识,是学习C++或C语言都必备的知识点.不知道你是否知道该知识?希望对大家有所帮助.一.main()函数参数通常我们在写主函数时都是void ...
- swift 学习(二)基础知识 (函数,闭包,ARC,柯里化,反射)
函数 func x(a:Int, b:Int) {} func x(a:Int, b:Int) -> Void {} func x(a:Int, b:Int) ->(Int,Int ...
- 初学者入门web前端:C#基础知识:函数
入行前端对函数的掌握程度有可能直接影响以后工作的效率,使用函数可以高效的编写编码,节省时间,所以我整理了C#中最基础的函数知识点,虽然我在学习中 遇到很多问题,但是只要能够解决这些问题,都是好的. 一 ...
- JavaScript基础知识(函数)
函数的基础 函数: 把实现相同功能的代码放到一个函数体中,当想实现这个功能时,直接执行这个函数即可:减少了的冗余:高内聚,低耦合--> 函数的封装: 函数:引用数据类型: var a = 10; ...
- PHP基础知识之函数
定义: <?phpclass foo-----定义类{ function do_foo()---类的方法 { echo "Doing foo."; ...
- php基础知识和函数
<?php /* echo "hello","aaaa"; //输出语法,可以输出多个字符串 print "world"; //可以输 ...
- php基础知识【函数】(1)数组array
一.排序 1.sort -- 从最低到最高排序,删除原有的键名,赋予新的键名[字母比数字高] 2.rsort -- 逆向排序(最高到最低),删除原有的键名,赋予新的键名[字母比数字高] 3.asort ...
- php基础知识【函数】(8)xml和变量函数
一.XML函数 参数类型 data --string,需要解析的数据集. parser --resource,一个指向要取得字节索引的 XML 解析器的引用. 1.创建和释放XMl解析器 ...
- php基础知识【函数】(7)url和ob函数
一.URl函数 1.urlencode -- 编码 URL 字符串 2.urldecode -- 解码已编码的 URL 字符串 3.rawurlencode -- 按照 RFC 1738 对 URL ...
随机推荐
- spark 加载文件
spark 加载文件 textFile的参数是一个path,这个path可以是: 1. 一个文件路径,这时候只装载指定的文件 2. 一个目录路径,这时候只装载指定目录下面的所有文件(不包括子目录下面的 ...
- WSADATA
中文名 WSADATA 操作系统 Windows CE 版本: 大于等于1.0 定义位置: Winsock.h 目录 1 说明 2 结构原型 3 参数说明 4 备注 说明编辑 WSADATA结构被用来 ...
- js 处理日期 看着比较全,备用
http://www.cnblogs.com/endora/archive/2012/12/06/endorahe.html js 处理日期 看着比较全,备用
- 20145212 实验三《敏捷开发与XP实践》
20145212 实验三<敏捷开发与XP实践> 实验内容 使用git上传代码 与20145223同学一组,使用git相互更改代码 同组实验报告链接:http://www.cnblogs.c ...
- Tips for writing a paper
Tips for writing a paper 1. Tips for Paper Writing 2.• Before you write a paper • When you are writi ...
- msbuild
https://msdn.microsoft.com/zh-cn/library/ms171466(v=vs.100).aspx
- Lua之元表
Lua之metatable 一.元表 Lua中的每个值都有一套预定义的操作集合,也可以通过metatable(元表)来定义一个值的行为,metatable包含了一组meatmethod(元方法). L ...
- [工具]json转类
摘要 这周在园子看到一篇介绍JsonCSharpClassGenerator这个工具的文章,感觉挺实用的,在现在项目中json用的是最多的,所以在转换对应的类的时候,确实挺频繁,所以就研究了一下这个工 ...
- 【9-20】vimtutor学习笔记
第一节 ghjk移动光标 :q!:强制退出vim x:删除光标处的字符 i:在光标处插入 A:附加文本 :wq:保存文档并退出 第二节 dw:删除一个单词 d$:删除至行尾 de:删除光标处到该单词结 ...
- oracle唯一索引与普通索引的区别和联系以及using index用法
oracle唯一索引与普通索引的区别和联系 区别:唯一索引unique index和一般索引normal index最大的差异是在索引列上增加一层唯一约束.添加唯一索引的数据列可以为空,但是只要尊在数 ...