C++入门篇——内联函数、auto、友元

C++入门篇——内联函数、auto、友元 友元函数 友元类



一、内联函数inline

在函数的调用中,一般来说会使用一种叫做运行栈的存储结构对函数的形参和局部变量。而这里所说的运行栈实际上就是一段内存空间,运行栈中的数据被分为了一个个的栈帧,而每一个栈帧其对应的都是一次函数的调用,每一次发生函数的调用时,就会有一个栈帧被压入运行栈中,而在返回调用时响应的栈帧就会被弹出。这样便会有一个问题就在于,在调用函数的时候会造成函数压栈的开销从而会在一定程度上降低函数运行的效率,而使用内联函数则会避免这种消耗
内联函数,即使用inline修饰函数,这样在编译器在编译阶段会将原先的远程访问栈帧的运行模式,转化成直接使用所对用的函数体替换函数的调用

值得注意的是 内联函数只适合某些特定的场景——函数简单又需要大量重复做的情况

内联函数的特点

  1. inline是一种以空间换时间的做法,省去调用函数额开销。所以代码很长或者有循环/递归的函数不适宜使用作为内联函数
  2. inline对于编译器而言只是一个建议,编译器会自动优化,如果定义为inline的函数体内有循环/递归等等,编译器优化时会忽略掉内联
  3. inline不建议声明和定义分离,分离会导致链接错误。因为inline被展开,就没有函数地址了,链接就会找不到

二、auto 关键字

auto关键字,不仅在C++中有应用,在C语言中也有,不过不常用。其在C语言中便是定义一个生命周期为自动类型的变量,当改变量不使用时进行销毁,一般由于定义在栈上的变量。例如:auto int a=10;但我们往往在使用时会省略这个关键字。但在C++中,其意义完全发生改变,表示自动类型推导功能,可以通过复制到操作来自动推导出当前变量的类型。可以说,使用auto关键词,变量的类型不是我们自己定义,而是编译器在编译时确定,因此本身不占运行的时间

值得注意的是

  1. 其优点在于可以简化类型的书写,使用auto可以自动匹配到相对应的类型,不会使程序产生错误
  2. 使用auto定义变量时必须对其进行初始化,在编译阶段编译器需要根据初始化表达式来推导auto的实际类
    型。因此auto并非是一种“类型”的声明,而是一个类型声明时的“占位符”,编译器在编译期会将auto替换为
    变量实际的类型
  3. 用auto声明指针类型时,用auto和auto*没有任何区别,但用auto声明引用类型时则必须加&
  4. auto在同一行声明多个变量时,这些变量必须是相同的类型,否则编译器将会报错,因为编译器实际只对
    第一个类型进行推导,然后用推导出来的类型定义其他变量
  5. auto 不能直接来声明数组

三、友元

我们都知道,C++是一种面向对象的语言,在之前的内容中我们说过,为了区别成员变量不同的访问权限,C++采用了三种不同的权限限定符(分别是:public,private,protect)以满足不同用户的访问需求,同时对一些重要的成员进行保护。但是在这看似美妙的外表下同时也蕴含着一些小问题,就比如今天我们要引出的一个概念——友元

在一般情况下,我们允许类中的一些特定的成员函数访问其中的私有成员,同时拒绝一般的访问请求,但是我们在实际使用中需要有一些操作经常访问这些私有元素,那么就需要在保护私有成员的同时给予某些特殊的操作一些小小的特权

友元函数

定义
友远函数可以直接访问类的私有成员,它是定义在类外部的普通函数,不属于任何类,但需要在类中声明,声明时需要加 friend 关键字

特点

  1. 一个函数可以是多个类的友元函数,可以对不同类进行访问,满足其特殊功能的要求
  2. 友元函数不能用const关键字进行修饰
  3. 友元函数可以在类定义的任何地方声明,不受类访问限定符限制
  4. 友元函数可访问类的私有和保护成员,但不属于类的成员函数,仅仅在类中声明有这个东西,在其他地方进行定义使用
  5. 友元函数的调用与普通函数的调用和原理相同
  6. 添加friend表示修饰的函数可以直接调用类中的私有成员,具有单向性,不可跨越性

友元类

定义
其声明与友元函数规则相似,在这种情况下,友元类的所有成员函数都可以是另一个类的友元函数,都可以访问另一个类中的非公有成员

特点
友元关系是单向的,不具有交换性。即友元并不是相互的,不能进行相互之间的访问,只能单向访问
友元关系不能传递,比如我们都学过平行线之间具有传递性,即a // b,b // c,a // c,但是友元关系没有这种性质

总结

提示:这里对文章进行总结:

例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值