码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • C++ const关键字


    C++ const关键字

          • 1.const 限定符
          • 2.const 的引用
          • 指针和 const
          • 顶层 const 和底层 const
          • constexpr 和常量表达式


    1.const 限定符

      const关键字的主要作用主要在于限定一个变量的值不被改变。

      如:用一个变量来表示缓冲区的大小。

    const int bufSize = 1024;
    
    • 1

    默认情况下,const对象仅在文件内有效,如果只在一个文件中定义const,需要在其它的文件中对其声明并使用它。其解决方法就是:对于const变量不管声明还是定义都添加 extern关键字,这样就只需要定义一次就够了。

    2.const 的引用

      可以把引用绑定到 const 对象上,就像绑定到其他对象上一样,我们称之为对常量的引用,如:

    int i = 10;
    const int &r1 = i;
    const int &r2 = 42;
    
    • 1
    • 2
    • 3
    指针和 const

      与引用一样,也可以令指针指向常量或非常量,如:

    int i = 10;
    const int *ptr = &i;s
    
    • 1
    • 2

      和常量引用一样,指向常量的s指针也没有规定其所指的对象必须是一个常量。

      指针是对象,引用则不是,因此和其它对象类型一样,允许将指针本身定义为常量,常量指针必须初始化,一旦初始化,则它的值(这指的是存放指针的地址)就不能改变了。将 * 放在const关键字之前用以说明指针是一个常量。

    示例:

    int a = 10;
    int *const ptr1 = &a;//从右到左进行阅读,离ptr1最近的符号是const,这就意味着ptr1本身是一个常量对象,紧接着是*号,所以ptr1是一个常量指针。
    
    • 1
    • 2
    顶层 const 和底层 const

      顶层const指的是指针变量本身是一个常量,底层const指的是指针所指的对象是一个常量。

    constexpr 和常量表达式

    &emsp 常量表达式是指值不会变并且在编译过程就能得到计算结果的表达式。

    constexpr 变量

    C++11规定,允许将变量声明为 constexpr类型以便由编译器来验证变量的值是否是一个常量表达式。声明为constexpr的变量一定是一个常量,而且必须使用常量表达式初始化,如:

    cosntexpr int a = 20;
    constexpr int b = a + 1;
    
    • 1
    • 2

      普通函数不能作为 constexpr 变量的初始值,但新标准允许定义一种特殊的 constexpr函数,这种函数应该足够简单以使用。

      指针和引用都能够定义为constexpr,但它们的初始值却受到严格限制,一个constexpr指针的初始值必须为nullptr或0或者存储在某个固定地址中的对象,允许函数定义一类有效范围超出函数本身的变量,这类变量和定义在函数体之外的变量一样有固定地址。constexpr引用能够绑定这样的对象,const指针也能指向这样的变量。

    NOTE:在constexpr声明中如果定义了一个指针,限定符 constexpr仅对指针有效,与指针所指的对象无关。

  • 相关阅读:
    蓝桥杯算法心得——拼数(排列型回溯dfs)
    Spring面试题15:Spring支持几种bean的作用域?singleton、prototype、request的区别是什么?
    window搭建本地mongo数据库并导入数据
    c语言:于龙加
    73-Java的Collection集合:概述、体系特点、常用API、遍历方式、存储自定义类型的对象
    MySQL数据库之索引
    提交有文件和其它文本内容的表单
    戏说领域驱动设计(十九)——外验
    企业电子招投标采购系统源码之电子招投标的组成
    抖音测试付费短视频:从短剧领域拓展到知识、娱乐全品类
  • 原文地址:https://blog.csdn.net/CltCj/article/details/127674810
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号