前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >c++常量和常量表达式[通俗易懂]

c++常量和常量表达式[通俗易懂]

作者头像
全栈程序员站长
发布2022-11-11 13:15:20
5840
发布2022-11-11 13:15:20
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

const,默认情况下仅在文件内有效

const int i(12);

const引用:对常量的引用不能被用作修改它所绑定的对象

const int ci(5);

const int &rci(ci);

rci = 90;//错误 不能修改

允许常量引用绑定到非常量的对象、字面值或表达式上

int i = 20;

const int &ri(20);

const int &ri3(i + ri);

常量引用仅对引用可参与的操作作出了限定,对于引用的对象本身未做限定

int i(10);

const int &c(i);

i = 90;//i不是常量,可以改变值

c = 20;//错误,c是一个常量引用,const限定了c为常量不能修改,i的修改与c的限定无关。

cout << c << endl;//值为90

//指针和const

int iv(10);

int iv1(23);

const int * pci1(&iv);//指向常量的指针,限定了该指针的操作,pci1的值可以改变,pcil指向的值不能变

pci1 = &iv1;

iv = 30;

int * const pci2(&iv);//常量指针,把指针本身定位常量,pci2的值不能改变,pci2指向的值可以改变

*pci2 = 90;

cout << *pci1 << endl;//23

cout << *pci2 << endl;//90

顶层和底层

顶层:表示指针本身是个常量

底层:指针所指的对象是常量

小技巧:const int * p: const修饰的是*p,也就是*p不能变。

int * const p: const修饰的是p,也就是p不能变。

字面值和constexpr

常量表达式:字面值是常量表达式,用常量表达式初始化的const对象也是常量表达式

const int ci = 20;//ci是常量表达式

const int cii = ci + 90;//cii是常量表达式

int iv = 30;//iv不是常量表达式

声明为constexpr的变量一定是常量,而且必须用常量表达式初始化

constexpr int cif = 23;

constexpr声明的指针,只对指针有效,与指针指向的对象无关

constexpr int cvi(12);//必须定义到函数体外部才能被cip使用

constexpr const int * cip(&cvi);

cout << *cip << endl;

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/187801.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年9月29日 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档