基础知识-引用

引用说明:

引用的时候需要在定义的时候初始化
&在此不是求地址运算,而是起标识作用。
类型标识符是指目标变量的类型。
声明引用时,必须同时对其进行初始化。
声明一个引用,不是新定义了一个变量,它只表示该引用名是目标变量名的一个别名,它本身不是一种数据类型,因此引用本身不占存储单元。

1、引用作为参数

char c;
char *p = &c;//指针
char& r = c;//引用

r是c的别名,用r和用f是一样的
在参数表里,或者作为成员变量可以不初始化,但是如果是本地变量或者是全局变量,必须初始化

2、常引用

const int& z = x;

代表z是x的别名,但是不能通过z改变x的值

3、引用作为返回值

以引用返回函数值,定义函数时需要在函数名前加&
用引用返回一个函数值的最大好处是,在内存中不产生被返回值的副本。

int& h()
{
    int q;
    return x;
}
h() = 16;

如果要从函数里返回一个引用,写在return那里的是一个变量,且本地变量不行(生命周期太短)。

4、引用和多态

class A
{
public:
	int& m_y;
	A(int& a);
};
A::A(int& a)m_y(a)
{
                
}

如果要在一个类里面定义一个引用的变量,则必须用构造函数初始化,不能在花括号里

void func(const int& y,int& z)
{
    z = z*5;
    z += 8;
}

const引用传进函数里,可以减少数据的传递,且不改变里面的值。

void func(int &)
fun(i*3);//error

函数里需要传进去一个能做左值的变量,i*3会被自动默认成const,但是如果函数里面是const就可以编译通过

#include <iostream>
using namespace std;
class A
{
public:
    int i;
    A() : i(0) {};
    ~A(){};
};
A& f()
{
    A a;
    return a;
}
int main()
{
    A b;
    b.i = 20;
    f() = b;
}

返回的a对象时本地变量,会被释放。所以下面的代码无意义

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值