C++ Primer Notes(6)
来源:互联网 发布:软件企业评估证书 编辑:程序博客网 时间:2024/05/17 01:27
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});(注意花括号);
- C++ Primer notes
- C++ Primer Notes(6)
- C++ Primer Notes(13)
- C++ Primer Notes(14)
- C++ Primer Notes(16)
- C++ Primer Notes
- C Primer Plus2-6
- C Primer Plus3-6
- C Primer Plus4-6
- C Primer Plus5-6
- C Primer Plus6-6
- C Primer Plus7-6
- C Primer Plus8-6
- C Primer Plus9-6
- C Primer Plus10-6
- notes of c++ primer (1)
- notes of c++ primer (2)
- C++ Primer Notes(7)
- 【UE4】如何在不更改原骨架的情况下将动画序列调整方向
- 九度oj-1431:sort.hash应用
- 老师给的jdbc连接的例子,封装之后
- Git(四)如何将更改的项目同步到github
- jQuery调试学习总结
- C++ Primer Notes(6)
- 二、安装Spark集群
- 56.合并间隔
- 算法——字符串匹配之KMP——看不懂算我输
- coderforces-#428三道水题
- 生成全排列
- 索引法和指针法访问数组
- 重新开博
- 网易内推笔试编程题2