4 const引用知识点

1 指针与引用

int val = 20;
int& valr = val;

int* p = &val;
int* &valr2 = p;

cout << &val << endl;
cout << p << endl;
cout << valr2 << endl;

cout << val << endl;
cout << valr << endl;
cout << *valr2 << endl;

在这里插入图片描述

2 引用与常引用

int val = 20;
    
const int& valr1 = val;
int& valr = 20;	/*error*/
const int& valr2 = 20;

int& valr = 20; /error/ 引用的初始化必须可以作为左值,20是数值,不可以作为左值;
const int& valr2 = 20; 这里通过int temp = int(20);构建一个temp,然后再通过temp初始化const int&,这个temp一直存在,直到程序块结束;此时会为常引用分配存储空间;

int val = 2012;

int& valr = val+1; 
// error,同样val+1不是一个左值
// 所以不能用来初始化int&

const int& valr1 = val+1; 
// ok,也是通过中间的临时变量处理

3 常引用结合指针

int val = 2012;

int*& valr = &val; 
// error,因为&val不是一个左值
// &val获取的是一个地址,不能进行&val++之类的操作

int* const& valr = &val; 
// ok,const T&就没有上面
// 这种限制了,&val构建中间变量,然后再初始化,
// 注意const不能放在*之前,否则就是修饰指针所指的对象了
const int var = 2012;
int*& varr = &var; // error,显然的

int* const& varr = &var; // error,因为var是const int类型的

const int* const& varr = &var; // ok,满足要求
const int var = 20;
    
const int* p = &var;
const int* &varr = p; // ok,此时不需要const&,因为p是左值
const int val = 2012;
const int* p = &val;
const int* &pr = p; // ok,p是左值

const int* const& pr1 = &val; 
// ok,通过中间变量初始化

int* const& pr2 = &val; 
// error,引用的类型不符合,一个是const int*,另一个是int*

4 常量引用的存储空间分配

C++中的const常量可能分配存储空间,也可能不分配存储空间;
以下有3种情况会分配存储空间:
1,当const常量为全局,并且要在其它文件中使用,会分配存储空间;
2,当使用&操作符,取const常量的地址时,会分配存储空间;
3,当const int& a = 100; const修饰引用时,也会分配存储空间;

5 const&初始化的类型转换

int val = 2012;
const double& valr = val;
double dval = 3.14159;
const int& valr = dval; 
// ok,temp构建的时候,类型转换int temp = int(dval);

const int& valr1 = 3.14159; 
// ok,temp构建的时候,类型转换int temp = int(3.14159);

int& valr2 = dval; 
// error,没有temp进行中间的类型转换

int& valr3 = 3.14159; 
// error,类似,没有中间变量进行类型转换
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值