c++ 关于const的理解

首先,const意味着“只读”。

个人理解:c++中,const修饰的对象可以分为两类:a、类似于c语言中的普通数据;b、类的对象和成员函数。


一、修饰普通数据变量

其实,第一类尤其容易理解错误的是:指针常量和常量指针。本文用于帮助区分二者。实际上,通过中文的语法重点,也可以理解它们两个所强调的重点。个人认为,中国人通常喜欢将重要的东西放在后面。所以,上面两个术语其实分别强调了常量和指针。指针常量意在强调常量常量指针意在强调指针

  • 指针常量:强调常量,意思就是这个指针本身是个常量,所以也就应该写成:
int * const p;  

  理解的时候可以划分为:(int *)(const p);

  • 常量指针:强调指针,意思是这是个指针,不过“它的指向”是个常量,所以写法应该是:
     const int *p;

  理解的时候可以划分为:(const int)(* p);

二、修饰类的对象

1、修饰对象

  • 一个类的对象可以用const修饰,如果一个对象被声明为const,那么就不能通过该对象调用类的非const成员函数。
  • 如果在类内定义了const数据成员,那么该成员的初始化必须在构造函数内进行,且初始化后不能被修改。所以,如果不在构造函数内初始化,它是没机会被修改的。const static 类型的除外,它必须在类内直接初始化。
  • const必须在构造函数内初始化,且不能使用赋值的方式(=),const数据成员的初始化必须在函数的初始化列表的表头给出,由冒号引出,如果有多个则使用逗号隔开。
  • class Myclass
    {

    private:

    int temp;

    const int x;

    const int y;

    public:

    Myclass(int);

    };

    Myclass::Myclass(int):x(10),y(20){temp=30}


  • const数据成员只能被构造函数和析构函数修改。

2、const修饰成员函数

  • const成员函数可以访问const数据成员和static静态成员函数。不能访问非const成员函数。
  • static静态成员函数不能调用const成员函数,因为const成员函数虽然特殊,但是仍然是类的成员函数,是类对象相关的,属于具体的某个对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值