C++ Primer Notes(6)

6.1 函数的返回类型不能是数组类型或函数类型,但可以是指向数组或函数的指针。

6.2 函数只能定义一次,但可以声明多次,如果一个函数永远不会被用到,那么它可以只有声明没有定义。

6.3 形参初始化的机理与变量初始化一样,如果形参是引用类型,它将绑定到对应实参上,否则,将实参的值拷贝后赋给形参。

6.4 如果函数无须改变引用形参的值,最后将其声明为常量引用。

6.5 当用实参初始化形参时会忽略掉顶层const,也就是说,当形参有顶层const时,传给它常量对象或者非常量对象都是可以的。

6.6 数组两个性质:不允许数组拷贝、使用数组时(通常)会将其转换成指针。尽管不能以值传递的方式传递数组,但是我们可以把形参写成类似数组的形式:

void func(const int *)

void func(const int[])

void func(const int[10])//这里的维度10表示我们期望数组有多少个元素,实际不一定。

上面三个函数等价,每个函数的唯一形参都是const int*类型的。

因为数组是以指针的形式传递给函数的,所以一开始函数并不知道数组的确切大小,调用者应提供一些额外的信息,管理指针形参有三种常用技术:

(1)使用标记指定数组长度。(2)使用标准库规范:void func(const int *beg,const int *end) .(3)显式传递一个表示数组大小的形参:void func(const int a[],size_t size);

6.7数组引用形参:void func(int (&arr)[10]) //形参是数组的引用,维度是类型的一部分不能省略。

6.8 指针数组:int *p[10];  指向数组的指针:int (*p)[10];

6.9可变形参的函数:(1)如果所有的实参类型相同,数量可变,可以传递一个名为initializer_list的标准库类型;(2)如果实参类型不同,可以用可变参数模板;

initializer_list定义在同名的头文件中,类似vector,是一种模板类型。

eg:int sum(initializer_list<int> L)

   {

       int sum=0;

       for(auto it=L.begin();it!=L.end();it++)

             sum+=*it;

       return sum;

    }

调用方法:sum({1,2});sum({1,2,3,4,5,6});(注意花括号);


      

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值