C++中的 const 关键字

const常见的使用情况


// const和宏的区别
const常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查,而对后者只进行字符替换,没有类型安全检查,并且在字符替换时可能会产生意料不到的错误。

const关键字

  1. const + 常量:必须在定义时就被初始化,并且不可修改

    • 全局常量:默认为extern,在另一个文件中可以直接使用 extern 对其进行声明引用
      • 例如:先int x;,再extern int x;
    • const常量:默认为文件作用域,如果需要在另一个文件中引用,需要特别声明
      • 例如:先extern const int x = 1;,再extern const int x;
  2. const + 成员变量:必须通过初始化列表进行初始化

    • 初始化后,不能够被修改。static const 成员变量需要在类外部单独定义并初始化(可定义在头文件)
  3. const + 对象:此对象不可以被改变

    • 不可以改变任何变量的值
    • 不可以调用对象中非const的成员函数
  4. const + & 常量引用:指向const对象的引用

    • const <数据类型>& <变量名> = <可以是const对象,或者其他数据类型对象>
    • 当右值为其他数据类型对象时,会发生一次类型转换
      • 例如:先int x = 3;,再const int& r = x;;实际中间会隐藏一步const int temp = x;,r指向的是临时对象temp,该临时对象不可以被访问。
      • 所以当该对象的值x后续被改变时,并不会使r的值做出相应改变,因为r是指向temp的。

const与指针

  1. 指向 const 的指针(const * p ):指针的指向可以改变,但是指针指向的值不可以改变
    • const对象 一定要用 指向const的指针 来 取址
  2. const 指针(* const p):指针的指向不可以改变,但是指针指向的值可以改变
  1. const * p ):指针的指向可以改变,但是指针指向的值不可以改变
    • const对象 一定要用 指向const的指针 来 取址
  2. 指针常量(指针是常量 * const p):指针的指向不可以改变,但是指针指向的值可以改变

摘自这里

//-------常量指针-------
    const int *p1 = &a;
    a = 300;     //OK,仍然可以通过原来的声明修改值,
    //*p1 = 56;  //Error,*p1是const int的,不可修改,即常量指针不可修改其指向地址
    p1 = &b;     //OK,指针还可以指向别处,因为指针只是个变量,可以随意指向;

    //-------指针常量-------//
    int*  const p2 = &a;
    a = 500;     //OK,仍然可以通过原来的声明修改值,
    *p2 = 400;   //OK,指针是常量,指向的地址不可以变化,但是指向的地址所对应的内容可以变化
    //p2 = &b;     //Error,因为p2是const 指针,因此不能改变p2指向的内容

    //-------指向常量的常量指针-------//
    const int* const p3 = &a;
    //*p3 = 1;    //Error
    //p3 = &b;    //Error
    a = 5000;    //OK,仍然可以通过原来的声明修改值

总结(图片摘自这里


posted @   不是勇士  阅读(74)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示