• 友链

  • 首页

  • 文章归档
h u a n b l o g
h u a n b l o g

欢

HI,Friend

11月
09
C++

常量

发表于 2023-11-09 • 字数统计 2140 • 被 1,710 人看爆

定义

- 变量一旦被初始化了,就不能被改变。
- const对象必须初始化
- 使用关键字"const"。
- 默认状态下,cosnt对象仅在文件内有效,如果想在多个文件之间共享,必须要在变量的定义前加上"extern"关键字。如:extern const int bufSize

例

    const int bufSize = 512;
    bufSize = 513;      //错误,试图向const对象写值

const引用

- 1.把对象绑定到const对象个,就像绑定到其他对象上一样。称为"常量引用"
- 2.引用的类型必须与其所引用对象的类型一致。初始化除外(只要该表达式能转化成引用类型即可)

例

    //1
    const int ci = 1024;
    const int &r1 = ci;     //正确:引用及其对应的对象都是常量
    r1 = 42;                //错误:r1是对常量的引用
    int &r2 = ci;           //错误:试图让一个非常量引用指向一个常量对象

    //2         
    int i = 42;                 //允许将const int&绑定到一个普通int对象上
    const int &r1 = i;          //正确:r1是一个常量引用
    const int &r2 = 42;         //正确:r3是一个常量引用
    const int &r3 = r1 * 2;     //错误:r4是一个普通的非常量引用
    //类型不一致会怎样
    double dval = 3.14;
    const int &ri = dval;
    //转换过程:编译器会创建一个临时变量在暂存表达式,导致最终引用的非原本想引用的变量
    const int temp = dval;      //由双精度浮点数生成一个临时的整型常量
    const int temp = dval;      //由双精度浮点数生成一个临时整型常量
    const int &ri = temp;       //让ri绑定这个临时量,最终ri引用的不是dval,而是temp

指针与const

指针常量

- 可以令指针指向常量,即指向常量的指针(存放常量地址的指针)。
- 指针常量:不能用于改变其所指对象的值。但可以用于指向一个非常量对对象

例

    const double pi = 3.14;     //pi是个常量,它的值不能改变
    double *ptr = π          //错误:ptr是一个普通指针
    const double *cptr = π   //正确:cptr可以指向一个双精度常量
    *cptr = 42;                 //错误:不能给*cptr赋值
    double dval = 3.14;         //dval是一个双精度浮点数,它的值可以改变
    cptr = &dval;               //正确:但是不能通过cptr改变dval的值

常量指针

- 即该指针本身是常量。
- 必须初始化,一旦初始化完成,则它的值(即存放在指针中的地址)就不能改变
- *放在const关键字之前用以说明指针是一个常量

例子

    int errNumb = 0;
    int *const currErr = &errNumb;      //curErr将一直指向errNumb,无法改变
    const double pi = 3.14159;
    const double *const pip = π      

    *pip = 2.72;                        //错误:pip指向的就是一个常量的指针,所以不能改变
    *curErr = 8;                        //正确:可改变,currErr指向的是一个int类型的常量指针,不可改变的是其地址,并不是对象的值

识别方法
要弄清楚这些声明最有效的方法是从右向左阅读。上例中离currErr最近的是const,表示其是一个常量,接着下一个符号是*代表是一个指针,*const表示为是一个常量指针,即int *const currErr是一个常量指针,指向的是一个int类型。按上面的方法推断const double *const pip,可知pip是一个常量指针,指向的是const double类型。

分享到:
OpenGL环境搭建(GLEW版)
Laya打包apk用模拟器测试
  • 文章目录
  • 站点概览
欢

网红 欢

你能抓到我么?

Email RSS
看爆 Top5
  • mac系统版本与Xcode版本有冲突 4,079次看爆
  • JAVA_HOME环境配置问题 3,729次看爆
  • AssetBundle使用 3,499次看爆
  • VSCode配置C++开发环境 3,256次看爆
  • Lua反射 3,132次看爆

Copyright © 2025 欢 粤ICP备2020105803号-1

由 Halo 强力驱动 · Theme by Sagiri · 站点地图