const与引用,与指针;顶层与底层const;constexp(c++)

场景1

double dval = 3.14;

const int &r1 = dval;//允许

int &r2 = dval;//不允许

int &r3 =  r1*2;//错误,不能通过非常量引用指向常量

场景2

const double pi = 3.14;

double *ptr = pi;//错误,ptr存在修改pi的风险

const double *cptr1 = π//底层const
const int ci = 0;//顶层const
double *const cptr2 = pi;//顶层const

 场景3

constexpr int mf = 20;
constexpr int limit = mf + 1;
constexpr int sz = size();//只有当size本身是一个constexpr函数才正确
constexpr int *np = nullptr;//常量指针

分析1:double类型赋值给int,编译器产生一个中间值temp = 3,r2为temp别名无用,所以编译器不允许。而r1有const修饰不用于改变dval值,所以允许存在。

分析2:顶层const表示变量本身是一个常量

            底层const表示指针所指向的对象是一个常量

分析3:变量一定是一个常量,必须用常量表达式初始化

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值