S06函数

本文详细介绍了C++中的函数,包括函数基础、参数传递方式、返回类型与return语句、函数重载、特殊用途语言特性如内联函数和 constexpr,以及函数匹配规则。特别强调了引用传递、默认实参、内联函数的使用和函数匹配过程中的最佳匹配原则。
摘要由CSDN通过智能技术生成

S06函数


一、函数基础
二、参数传递

1、引用传递(by reference)和值(by value)传递,使用引用传递来替代指针形参

2、当某种类型不支持拷贝操作或是较大时,通过引用传递来访问该类型的对象

3、C++中允许定义名字相同的函数,但是不同函数的形参列表应不同(部分情况下也视为相同,例如会忽略顶层const故const int和int视为相同的形参)

注意:和其他初始化一样,实参初始化形参时会忽略形参顶层const

4、使用常量引用可以接受更多实参的类型且不会改变实参的值,因此尽可能使用常量引用
(1)普通引用可以修改实参内容
(2)普通引用不能接受const对象、字面值常量、需要类型转换的对象等,限制了参数类型

5、数组形参
(1)使用标记指定数组长度:如字符数组末尾的’\0’
(2)使用标准库规范:如传入const int *beg, const int *end来指定数组
(3)显式传递一个表示数组大小的形参:如传入const int ia[], size_t size
(4)数组引用形参:如传入int (&arr)[10],这里指定大小的10不可缺少且传入数组的维度必是10,否则会报错,形参是数组的引用,维度是类型的一部分,维度不同则类型不同
(5)传递多维数组:如传入int (*matrix)[10]或int matrix[][10],指定大小的10不可缺少,同时这里传入的实际上是指向含有10个整数的数组的指针

6、命令行运行程序的参数

>prog -d -o ofile data0
main(int argc, char *argv[])
argc = 5
argv[0] = "prog"       //也可以是空串,空串时使用参数从argv[1]开始
argv[1] = "-d"
argv[2] = "-o"
argv[3] = "ofile"
argv[4] = "data0"
argv[5] = 0

7、可变形参
(1)如果所有形参类型相同,传递initializer_list的标准库类型
(2)如果所有形参类型不完全相同,使用可变参数模板,参考S16模板与泛型编程

vector<int> iveca{ 1,2,3 };  
initializer_list<int> x{ 1,2,3 };
vector<int> ivecb(x);          //正确,此时ivecb中有1、2、3
list<int> lsta(x);             //正确,此时lsta中有1、2、3
list<int> lstb(iveca);         //错误,不同容器不能相互初始化

8、initializer_list与vector不同,前者的元素永远是常量值,向类型为initializer_list的形参传递值时需要把序列放置在花括号中,可以用initializer_list来初始化其他容器

initializer_list<T> lst;                 //默认初始化,T类型元素的空列表
initializer_list<T> lst{a, b, c....};    //lst的元素是对应初始值
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值