c++入门系统对比第一课(下)

目录

6.引用

6.1引用的特性

6.2 常引用

6.3 引用的使用场景

6.4引用和指针的区别

7.内联函数

7.1内联函数的特性

8.auto关键字

注意几点使用的细节

9.基于范围的for循环(C++11)

9.1使用条件

10.指针控制nullptr

10.1 C++98中的指针空值

10.2 注意事项


6.引用

引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。

  比如:李逵,在家称为"铁牛",江湖上人称"黑旋风"。

也就是说,无论叫什么,本质上指代的都是同一个人,比如在学校的时候,我们的学号和姓名都是指的同一个人。

使用方法:

类型& 引用变量名(对象名) = 引用实体;

这样看并不明确,我们再来看代码

这里我们打印一下就能很明确得到,这两个变量指的的确是同一个地方。

但是注意:引用类型必须和引用实体是同种类型的。

6.1引用的特性

1. 引用在定义时必须初始化
2. 一个变量可以有多个引用
3. 引用一旦引用一个实体,再不能引用其他实体

很好理解,一个人可以有多个外号,但是这个外号都没确定给谁的时候,你要是用这个外号来指代别人,谁都不知道你指的是谁不是吗?

6.2 常引用

void TestConstRef()
{
    const int a = 10;
    //int& ra = a;   // 该语句编译时会出错,a为常量
    const int& ra = a;
    // int& b = 10; // 该语句编译时会出错,b为常量
    const int& b = 10;
    double d = 12.34;
    //int& rd = d; // 该语句编译时会出错,类型不同
    const int& rd = d;
}

其实,这里就要我们对const修饰的变量不能更改这个概念有很明确的界限。

对于 const 修饰的变量意味着只能读不能写,因此在为 const 变量取别名时也要加 const,不能出现本来无法修改,你加个外号就能修改的情况吧。

所以正确写法应该是:const int& ra = a;   我们上下要一致。

6.3 引用的使用场景

引用最大的特点就是作为函数的参数,这样不需要指针就可以交换两个变量的值。

void Swap(int& left, int& right)
{
   int temp = left;
   left = right;
   right = temp;
}

在这里是作参数。引用返回效率会更快一点,因为直接返回的是变量的别名。

在正常的函数中,因此函数在调用完就被销毁了,因此它是将返回值先给了一个临时变量,由临时变量返回给主函数。因此需要注意的是,

引用返回时返回的必须是静态变量或者是堆上的变量。

第二种就是做返回值。

int& Count()
{
   static int n = 0;
   n++;
   // ...
   return n;
}

这里我们总结一下前面的知识,我们之前在数据结构也说过,形参是实参的临时拷贝。那么以值作为参数或者返回值类型,在传参和返回期间,函数不会直接传递实参或者将变量本身直接返回,而是传递形参或者返回变量的一份临时的拷贝,因此用值作为参数或者返回值类型,效率是非常低下的,尤其是当参数或者返回值类型非常大时,效率就更低。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值