引用和const

一、引用传入

       声明方法:类型标识符 & 引用变量名 = 被引用的变量名

        表层来看引用只是一个别名,底层来看C++中的引用和指针的处理方式相同(在所有用到引用变量的地方系统会自动解引用

        特点:

                ①必须被初始化

                ②引用初始化的变量一定要可以取地址

                ③引用是不可改变的(引用声明完毕后,相当于目标变量名有两个名称,因此不能把该引用名作为其它变量的别名)

                ④引用只能访问引用所引用变量引用的内存单元

二、const关键字(在C语言和C++中const关键字都是在编译阶段完成)

       1、在C语言中 const关键字的作用只有一个,即const修饰的变量不能做左值,称为常变量

       2、在C++中,const关键字将其修饰的变量属性置为常量(杜绝间接访问修改常量内存块)

          注意:c++中const修饰的是常量,常量是不允许被修改的,因此一定要初始化并且被const修饰的变量不允许普通指针指向

       3、const修饰遵循就近原则,数据类型对于const来说是透明的:

             const int *p  和  int const *p

三、const和指针的结合

int a = 10;
int *p = &a;
const int **q = &p;

//第三行代码是错误的:const修饰 **q 即直接访问a,a就是一个常量,*p访问a有修改a的风险
//修改如下

int a = 10;
int const *p = &a;//杜绝了通过*p 修改a的风险
const int **q = &p;

/*
int a = 10;
int *p = &a;
const int * const *q = &p;//杜绝了通过 **q 修改a的风险,和 *q 修改 pde风险
*/

四、const和引用的结合

int a = 10;
int &b = a;//正确
//int &c = 10;//错误,10是常量,常量不能被取地址
//修改
const int &c = 10;//加上const关键字后,10这个常量被放进一个临时量中,临时量可以取地址

const和引用结合称为常引用,常饮用可以引用立即数,系统会将立即数放进临时量中,常引用来引用这个临时量

int a = 10;
int *p = &a;
//const int * &q = p;//错误
//修改如下
const int * const& q = p;
//或者
// const int *p = &a;

五、const和形参的结合

      1、 形参加上const的作用:

              ①防止实参被修改

              ②引用立即数

   2、  引用做形参和普通变量做形参的区别:

           ①引用可以修改实参的值

           ②引用不能引用立即数,部分实参无法调用

六、const和返回值的结合

int *func()
{
    return 1;
}


int main()
{
    int irt = *func();
    int *prt = func();
    int &rrt = *func();
    //int * &prrt = func();//等价于 int* &prrt = eax;
    //寄存器eax不能取地址
    //修改
    int *const &prrt = func();
}
int &func()
{
    int a = 10;
    return a;
}

int main()
{
    int irt = func();//函数返回值由eax寄存器带回,eax里放的是&a,引用有自动解引用的功能 则访问到a
    int &rrt = func();
    int *prrt = &func();
}

        

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值