zoukankan      html  css  js  c++  java
  • C++之const

    const

    1.基础知识

    • const变量创建后其值不得更改,并且创建时必须初始化(注意这里的const要修饰的是变量本身,const *指针名这里的const修饰的是指针所指向的内容);初始化包括编译时初始化例如:const int a = 12, 以及运行时初始化例如:const int a = getNum()
    • const对象仅对当前文件有效,如果想在多个文件中共享const对象,在该const对象定义以及申明之前都加上extern(注意:普通变量的共享,定义时可以不加extern)

    2.对常量的引用(cosnt 变量类型 & 变量名

    const int a = 12;
    const int &b = a;
    int &c = a; //wrong,不能用非常量引用绑定常量对象
    b=13; //wrong,相当于改变了常量a的值,有悖于常量的原则
    
    • 常量的只能由const X & XX来绑定
    • 不可通过常量的引用来更改其绑定常量对象的值
    • const X & XX可以是非常量的引用
    • const X & XX是变量的别称,在创建同时必须先初始化
    int b = 12;
    const int &a = b;
    b = 13;
    a = 13; //wrong,不可以通过const & 来更改其绑定的对象值
    cout << a << endl; //最后输出的值是13
    

    -----------------我是高能预警的分割线-----------------
    (0_0) 前方高能预警,常量指针+指针常量+指向常量的指针常量(这些名称都是网络上流传的俗称)

    3.指向常量的指针(const 变量类型 * 变量名 or 变量类型 const * 变量名

    注:指向常量的指针又俗称常指针or常量指针

    const int a = 12;
    const int a2 = 11;
    const int *b = &a;
    int *c = a; //wrong
    *b = 13; //wrong
    b = &a2;
    cout << *b << endl; //输出值是11
    
    • 常量对象的地址只能使用指向常量的指针存放
    • 不可以通过常量的指针来更改其指向常量对象的值,但是有趣的是const * 的存放的地址值却是可以改变的哦!
    • const X * XX可以指向非常量对象
    • const X * XX 中的的const是修饰的指针所指向的对象,所以指针在创建时可以不进行初始化

    4.指针常量(变量类型 * const 变量名

    注:要和常指针(常量指针)区别开,(*-*)其实也很好区分的哦,const X * XX 叫常量指针(常量符号在前);X * const XX 叫指针常量 (指针符号在前)

    • 指针常量在创建时就必须要同时初始化
    • 指针常量如果指向的对象不是一个常量,那么就可以通过其来修改指向对象的值,但是由于const修饰的是这个指针对象,那么其自己的值不能改变
    int a1 = 11;
    const int a2 = 12; 
    int *const b1 = &a1;
    int *const b2 = &a2; //woring
    

    5.指向常量的指针常量 (const 变量类型 * const 变量名

    • 其值和其指向的值都不能改变




    -------------------------------------------我是求打赏的分割线-------------------------------------------

    大海中的一颗星辰,天空中的一枚卷花

    作者:二卷

    出处:http://www.cnblogs.com/erjuan/

    本文版权归二卷和博客园共有,欢迎转载,但未经二卷同意必须保留此段声明哦,且在文章页面位置给出二卷的原文连接

    有错误的话也可以联系二卷指正哦(鞠躬)

  • 相关阅读:
    Java练习 SDUT-1117_求绝对值(选择结构)
    Java练习 SDUT-2561_九九乘法表
    Java练习 SDUT-1160_某年某月的天数
    HDU-1024_Max Sum Plus Plus
    博客园页面DIY
    JDBC
    JavaSE | Lambda| Optional| Stream API
    JavaSE| 网络编程
    JavaSE| 反射
    JavaSE | IO流
  • 原文地址:https://www.cnblogs.com/erjuan/p/6421988.html
Copyright © 2011-2022 走看看