每日复习笔记4.25

C++复习笔记

c++ primer笔记

函数(一)

函数的定义

函数由函数名以及一组操作数类型唯一的表示。

函数体是一个作用域
函数体是一个语句块,定义了函数的具体操作,形成了一个 新的作用域。可以在函数体内定义变量,这种变量是局部变量,变量名字只在函数内可见。

  1. 函数返回类型
    函数的返回类型可以是内置类型,类类型或者复合类型(例如引用或者指针),甚至是void类型(即可以没有返回值)。但是不能返回另一个函数或者内置类型的数组。函数必须指定返回值类型

  2. 形参列表
    形参列表可以为空但是不能忽略。形参表是由一系列用逗号分隔的参数类型和参数名组成,每一个参数的数据类型必须全部声明。
    c++中每次函数调用编译时都会检查实参类型。调用函数时,对于每一个实参,其类型都必须与对应的形参类型相同,或者可以转换成对应形参的类型。

参数传递

形参的初始化与变量的初始化一样:如果形参为非引用类型,则复制实参的值;如果形参为引用类型,则它只是实参的别名。

  1. 非引用形参
    指针形参
    和其他非引用类型一样,这里只是赋值指针的值作为局部变量。实参的值并不会受到函数操作的影响。

consr形参
调用函数时,如果该函数之用的是非引用的非const形参,则既可以给该函数传递const实参,也可以传递非const实参。
如果该函数之用的是非引用的const形参,则既可以给该函数传递const实参,也可以传递非const实参。和非const类型不同的是,函数中不能修改实参的局部副本

复制实参的局限性
复制实参并不是所有情况都适合:
a)当需要在函数中修改实参的值时。
b)当需要以大型对象作为实参传递时(因为复制对象消耗比较大)。
c)所传递的参数类型无法复制时。

  1. 引用形参
    如果期望函数修改实参的值就可以使用引用形参

可以使用引用形参返回额外的信息
因为函数的返回值只能由一个,但是如果函数有不止一个内容需要返回,则可以通过定义引用形参的方式保存信息。用传递进来的实参保存信息时候,函数调用结束,需要返回的信息也保存在引用实参中。

利用const引用避免复制
如果使用引用形参的唯一目的时避免复制(不适合复制实参情况)时,则应该将 形参定义为const引用。既可以避免复制,又可以利用const修饰符避免实参被修改。

应该将不需要修改的引用形参定义为const引用。普通的非const引用形参在使用时不够灵活。这样的形参即不能用const对象初始化,也不能用字面值或产生右值的表达式初始化实参。

  1. 传递指向指针的引用
    有如下函数的定义:
//交换传入的两个指针的值
void ptrswap(int *&v1,int *&v2){
	int *tmp = v2;
	v2 = v1;
	v1 = tmp;
}

其中形参 int *&v1要从右到左理解,首先v1是一个引用,这个变量与指向int型对象的指针相关联。

  1. 数组形参
    数组是不可以被整体复制的,而且在使用数组名字时,这个名字会自动转化为指向第一个元素的指针。由于这两点特性,我们一般通过操纵指向数组中的元素的指针来处理数组。

数组形参的定义
可以使用一下三种方式执行数组形参:

void print(int*);
void print(int[]);
void print(int[10]);

这三种定义是等价的,形参类型都是int*。

形参的长度会引起误解
当编译器检查数组形参关联的实参时,他只会检查实参是不是指针、指针类型和数组元素的类型是否匹配,而不会检查数组长度。

数组实参
一般来说,数组以普通的非引用类型传递。在传递数组时,实参是指向数组第一个元素的指针,形参复制的是这个指针的值,而不是数组元素本身。函数操作的时这个指针的副本,所以不是修改指针本身的值,但是可以用过这个指针修改指针所指向的数组元素的值。

通过引用传递数组
如果形参是数组的引用,则编译器不会将数组实参转化为指针,二十传递数组的引用本身。在这种情况下,编译器会检查数组实参的大小和形参的大小是否匹配。

void printArray(int (&arr)[10]);

这个函数就会严格地接受含有10个int型数据的数组。

函数声明

函数声明由函数返回类型、函数名和形参列表。这三个元素被称为函数原型

默认实参
默认实参是通过给形参表中的形参提供明确的初始值来指定的。
如果给该函数中形参提供默认值,则定义在该形参前面的形参也要提供默认值。

string screen(size_type height = 24,
			  size_type width = 80,
			  char background = ' ');

就上面这个函数的声明,如果给background提供了实参,也必须给height和width提供实参。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值