zoukankan      html  css  js  c++  java
  • 总结const

    int b;

    const int  *a=&b;

    int const * a=&b;

    int * const a =&b;

    const int *const a=&b;

    前两种都是一样的效果,都表示指针指向常量,*a=10这样做是不可的,因为指向的是一个常量,但是我们有两种方式改变*a的值

    (1)b=10,我们通过改变过b的值(右值)

    (2)int c=10

      a=&c

    让指针指向别的变量,毕竟指针不是常量,指针可以改变指向

    第三种表示指针是一个常量,指针不能变,但是指针指向的值可以改变

    int  *const a=5;

    *a=10 可以

    a++不可以,指针不可以改

    第四种都不可以改变

    const int *a;

    int * const a;

    第一种是可以的,常量需要初始化,变量可以不初始化,第一种,a是变量,他是一个int *类型的,而*a是不可改变的,是变量,所以第一种是正确的

    第二种不可以,因为第二是说的是指针是常量,而a就是指针,是常量,所以不可以不初始化

    如果一个函数最后加上const,表示这个函数里面不能对成员变量进行修改,也就是说是一个只读函数,内部也不能调用与改变过成员函数有关的函数,只能调用只读函数,但是如果在只读函数中想要改变过成员函数,可以在是定义成员函数的时候加上mutable

    *********************************************************************************************

    1:const可以用于定义常量,上面

    2:可以进行类型数据监测

    3:可以保护不能修改的东西,增强健壮性

    4:方便一键替换

    5:为函数重载提供条件(void fun(),,,void fun() const)

    6:节省空间,避免不必要的浪费,const常量从汇编的角度来说只是给出内存地址,就一分拷贝,而#define给出的是立即数,是多份拷贝

    7:提高效率,编译器通过不为const分配内存,只是放在符号表中,避免了读取内存造成的浪费

    ********************************************************************************************

    const修饰的类对象,任何对象都不能改,只能调用const成员函数

    *****************************************************************************************

    将const转为非const的方法

    采用const_cast 进行转换。  
    用法:const_cast <type_id>  (expression) 
    该运算符用来修改类型的const或volatile属性。除了const 或volatile修饰之外, type_id和expression的类型是一样的。

    • 常量指针被转化成非常量指针,并且仍然指向原来的对象;
    • 常量引用被转换成非常量引用,并且仍然指向原来的对象;
    • 常量对象被转换成非常量对象。

     **********************************************************************************************************************

     

    补充:

    如果在非const成员函数中,this指针只是一个类类型的;如果在const成员函数中,this指针是一个const类类型的;如果在volatile成员函数中,this指针就是一个volatile类类型的。

    new返回的指针必须是const类型的。

     *********************************************************************************************

    const和define区别

    1:const有数据类型,宏常量没有数据类型,编译器对前可以进行安全检查,对后者只是简单的替换,不检查

    2:有些集成的调式工具可以对const进行调试,对宏不调式,在c++中,const已经完全取代了宏

  • 相关阅读:
    权重平等分布局And TableRow布局误区
    播放视频的框架Vitamio的使用问题
    Android上常见度量单位【xdpi、hdpi、mdpi、ldpi】解读
    使用PullToRefresh实现下拉刷新和上拉加载
    如何安全退出已调用多个Activity的Application?
    Stirng,Stringbuffer,Stringbuild的区别浅淡
    python3 logging
    从集合中筛选数据
    python3 模块
    python3 字符串的 maketrans,translate 方法详解
  • 原文地址:https://www.cnblogs.com/13224ACMer/p/6399848.html
Copyright © 2011-2022 走看看