zoukankan      html  css  js  c++  java
  • 关于const

    1.顶层const和底层const

    const修饰的对象本身是常量,则为顶层const,否则为底层const

    如:

    const int a=10;        //a是int常量,顶层const

    int *const b=nullptr;   //b为指向int 类型的常量指针,顶层const

    const int *c=nullptr;   //c为指向const int 类型的指针,指针c所指对象为常量,指针c本身不是常量,底层const

    2.注意点

    下面两种情况下,p是常量指针,而不是指向常量的指针,等价于char *const p=nullptr,而不是const char *p=nullptr;

    • typedef char* type;

            const type p=nullptr;             

    • constexpr char *p=nullptr; 

    3.对const的引用

    可以用任意类型的表达式作为初始值,但即使用非const变量初始化,也不能通过引用名修改绑定对象的值

    int i=42;

    const int &a=i;   //ok,但不能通过a修改i的值

    const int &b=42; //ok

    const int &c=a*2;  //ok

    但普通变量不能对const引用

    const int a=1;

    int &b=1;   //error

    4.指向const的指针(底层const)

    和引用一样,指向const类型的指针可以用同类型的const和非const初始化

    如:

    const int i=10;

    int j=10;

    const int *a=&i;   //ok

    a=&j;    //ok

    但指向非const的指针只能用同类型的非const初始化

    如:

    const int i=10;

    int j=10;

    int *p=&j;   //ok

    p=&i;      //error

    5.常指针(顶层const)

    int i=10;

    const int j=10;

    int k=10;

    int *const p=&i;          //ok

    *p=12;                    //ok,p指向的对象不是常量,可以改变

    *p=j;                 //error,p是指向int型的,而不是指向const int类型的

    p=&k;               //error,p本身是常量,其值不能改变

  • 相关阅读:
    alpha冲刺—Day8
    alpha冲刺—Day7
    alpha冲刺—冲刺计划&代码规范
    Linux安装jdk
    chrome插件开发-notification API注意事项
    VSCode远程连接Docker
    Idea发布项目到Docker
    开发环境配置
    Java设计模式之《单例模式》及应用场景
    使用Docker安装jenkins
  • 原文地址:https://www.cnblogs.com/mrlsx/p/5547503.html
Copyright © 2011-2022 走看看