c++:函数

本文详细介绍了C++中的函数,包括函数基础如局部对象、声明和分离式编译,参数传递的不同方式(传值、传引用),返回类型和return语句的使用,函数重载的原理与限制,以及特殊语言特性如默认实参、内联函数和constexpr。此外,还讨论了函数匹配的过程和实参类型转换规则,以及函数指针的应用。
摘要由CSDN通过智能技术生成

函数

函数基础

局部对象

在 C++语言中,名字有作用域,对象有生命周期(lifetime), 理解这两个概念非常重要。

  • 名字的作用域是程序文本的一部分,名字在其中可见。
  • 对象的生命周期是程序执行过程中该对象存在的一段时间。

自动对象

局部静态对象

函数声明

分离式编译

C++语言支持所谓的分离式编
译 (separate compilation)。分离式编译允许我们把程序分割到几个文件中去,每个文件独 立编译。

编译和链接多个源文件


参数传递

每次调用函数时都会重新创建它的形参,并用传入的实参对形参进行初始化

形参初始化的机理与变量初始化一样。

和其他变量一样,形参的类型决定了形参和实参交互的方式。如果形参是引用类型它将绑定到对应的实参上;否则,将实参的值拷贝后赋给形参。

当形参是引用类型时,我们说它对应的实参被引用传递(passed by reference) 或者函 数被传引用调用(called by reference)o 和其他引用一样,引用形参也是它绑定的对象的别 名;也就是说,引用形参是它对应的实参的别名。

当实参的值被拷贝给形参时,形参和实参是两个相互独立的对象。我们说这样的实参
被值 传 递 (passed by value) 或者函数被传值调用(called by value)。

传值参数

当初始化一个非引用类型的变量时,初始值被拷贝给变量。此时,对变量的改动不会影响初始值。
传值参数的机理完全一样,函数对形参做的所有操作都不会影响实参。

指针形参

指针的行为和其他非引用类型一样。当执行指针拷贝操作时,拷贝的是指针的值。拷
贝之后,两个指针是不同的指针。因为指针使我们可以间接地访问它所指的对象,所以通
过指针可以修改它所指对象的值。指针形参的行为与之类似

熟 悉 C 的程序员常常使用指针类型的形参访问函数外部的时象:在 C++语言中,建议使用引用类型的形参替代指针。

传引用参数

对于引用的操作实际上是作用在引用所引的对象上。引用形参的行为与之类似。

使用引用避免拷贝

拷贝大的类类型对象或者容器对象比较低效,甚至有的类类型(包括IO类型在内)
根本就不支持拷贝操作。当某种类型不支持拷贝操作时,函数只能通过引用形参访问该类
型的对象。

使用引用形参返回额外信息

一个函数只能返回一个值,然而有时函数需要同时返回多个值,引用形参为我们一次
返回多个结果提供了有效的途径。

一种方法是定义一个新的数据类型,让它包含两个成员。还有另一种更简单的方法,我们可以给函数传入一个额外的引用实参

const形参和实参

和其他初始化过程一样,当用实参初始化形参时会忽略掉顶层const。换句话说,形参的 顶层const被忽略掉了。当形参有顶层const时,传给它常量对象或者非常量对象都是 可以的

在C++语言中,允许我们定义若干具有相同名字的函数,不过前提是不同函数的形参列表
应该有明显的区别。因为顶层const被忽略掉了,所以在上面的代码中传入两个fun 函 数的参数可以完全一样。因此第二个fun 是错误的,尽管形式上有差异,但实际上它的 形参和第一个fun 的形参没什么不同。

void fun(const int i){
   /* fun 能够读取 i,但是不能向 i 写值 */}
void fun(int i){
   }//错误:重复定义了 fun(int)

在C++语言中,允许我们定义若干具有相同名字的函数,不过前提是不同函数的形参列表
应该有明显的区别。因为顶层const被忽略掉了,所以在上面的代码中传入两个fun 函 数的参数可以完全一样。因此第二个fun 是错误的,尽管形式上有差异,但实际上它的 形参和第一个fun 的形参没什么不同。

指针或引用形参与const

形参的初始化方式和变量的初始化方式是一样的,我们可以使用非常量初始化一个底层co n st对象,但是反过来不行;同 时一个普通的引用必须用同类型的对象初始化。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1nSAdjTv-15901265780

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值