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

c++常量和常量表达式[通俗易懂]const,默认情况下仅在文件内有效constinti(12);const引用:对常量的引用不能被用作修改它所绑定的对象constintci(5);constint&rci(ci);rci=90;//错误不能修改允许常量引用绑定到非常量的对象、字面值或表达式上inti=20;constint&ri(20);con…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

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.net/187801.html原文链接:https://javaforall.net

(0)
上一篇 2026年4月18日 下午2:52
下一篇 2026年4月18日 下午2:58


相关推荐

  • .NET中代理服务器WebProxy的各种用法

    .NET中代理服务器WebProxy的各种用法因为涉及到代理的各种情况,WebRequest和WebProxy类的文档写的相当复杂,不但各个文档关注点不同,而且不同版本的同一文档也有小小的区别,网上也没有关于这个类的相关文章。于是乎这篇Blog是我钻研半天MSDN很久后总结并且花了一小时憋出来的,希望下面的内容能帮到大家。(AcDown中也使用了相关的代码,有兴趣的可以找来看看【解析】.NET中代理服务器WebProxy的各种用法)直接进入

    2022年6月21日
    23
  • CocosCreator微信小游戏排行榜开发

    CocosCreator微信小游戏排行榜开发CocosCreator 微信小游戏排行榜开发开发前言步骤 1 开发前言第一次接触微信小游戏开发的小伙伴 可以看看排行榜的开发和注意事项 一 开发微信排行榜的话 用户的信息需要从微信提供的 API 获取 同时微信为了保护用户的信息安全 将用户的信息保护了起来 比如用户的好友信息 用户的 openID 等等 当我们的排行榜需要把用户的一些信息展现出来时 就得用微信为我们提供的开放域进行开发二 开放域作

    2026年3月19日
    1
  • iphonex适配游戏_Unity+iPhoneX适配方案[通俗易懂]

    作者:范世青王天宇17年下半年,苹果传出新一代iPhone的消息——iPhoneX。随之而来的还有他不同于以往任意一代iPhone的刘海设计。一时间,iPhoneX的适配问题迅速在产品圈流传开。而作为一个线上手游的客户端工程师,我在和团队共同历经了为iPhoneX适配的艰难岁月后,终于在产品上市之日,获得了商店首批适配推荐。那么iPhoneX适配到底有什么需要注意的点,又应该采取什么方案呢?&…

    2022年4月7日
    61
  • wireshark 过滤方式「建议收藏」

    wireshark 过滤方式「建议收藏」(1)协议过滤比较简单,直接在抓包过滤框中直接输入协议名即可。tcp,只显示TCP协议的数据包列表http,只查看HTTP协议的数据包列表icmp,只显示ICMP协议的数据包列表(2)IP过

    2022年6月30日
    118
  • flask 的 jsonify 自动排序问题

    flask 的 jsonify 自动排序问题背景·Python在写接口的时候有时需要返回json格式的数据给客户端·最简单的方式就是用flask的jsonify,能直接将字典格式化为json的形式进行传输例如fromflaskimportjsonify………defreturn_success(data):”””返回成功信息”””returnjsonify(data)通过以上jsonify的方式大部分需求是能够搞定的问题引发但是有时候我们要传递的json格式可能

    2022年5月23日
    39
  • matlab中trapz,MATLAB中trapz和cumtrapz函数

    matlab中trapz,MATLAB中trapz和cumtrapz函数这两个函数都是 MATLAB 中的内置函数 是基于梯形法则的数值积分公式例如我们有函数 y x 3 2x 3 为了计算在 0 1 上的积分 可以这么做 其中 x 和 y 分别是自变量和对应的值 trapz 其实就是 trapezoidal 梯形的简写 cumtrapz 函数和 trapz 函数使用方法类似 但是返回的结果不一样 前面的 cum 是 cumulation 的意思 也就是累积 相当于是不断地从第一个值累积到当前的结

    2026年3月17日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号