关于常量(包括常成员函数与this指针)

意义

利用编译机制防止程序员出错

尤其在函数传参时,你不知道哪天你自己脑残或者其他人维护你代码时不了解情况,把一个没必要修改的值修改了,有可能会出现难以检查的错误。

只读区域效率高、不分配空间

常量通常不会被分配空间,一般保存在符号表中,这样一来效率提高,因为不用读内存,二来节省了空间。

使用

声明
const int a = 10;

必须被初始化
这不废话吗? 前面不初始化,后面又不能赋值,那这个量怎么用啊?

常量与指针

几个指针间的关系

指针常量
本质

这是一个指针,这个指针是一个常量

保护对象

指针与变量之间的指向关系

使用
int a;
int * const p = &a;
常量指针
本质

这也是一个指针,这个指针指向常量

保护对象

指针指向的内容

使用
const int x;
const int *p1 = &x;
int const *p2 = &x;
int y;
const int *p3 = &y;
int const *p4 = &y;
指向常量的指针常量
就是常量指针+指针常量

双重保护:这个指针的指向关系被保护,这个指针指向的内容也被保护

const int x;
const int * const p1 = &x;
int const * const p2 = &x;
int y;
const int * const p3 = &y;
int const * const p4 = &y;

传递过程中修改权限不能放大

常成员函数

使用

class test
{
    int n = 8;
public:
    void f()const
    {
        cout << n << endl;
    }
};

这里的f()就是一个常量成员函数,加了这个const说明这个函数不能对类里的数据进行修改,只能读取

this指针与常成员函数

thiis指针
  1. 一个类的数据成员的每个对象都分配的,但是成员函数就不一样了,一个类的成员函数是所有对象公用的(类似静态变量)
  2. 程序是一路向前走的,通过a.f()调用类里函数时,如果没有什么标记的话,函数是不知道谁调用的它
    为了解决这样的一个问题,我们有了this指针,this指针指向对象。函数中的成员变量实际上都是this->成员变量
this指针的数据类型

this指针是一个系统送给我们的A* const类型的指针(A为类)
如果是常成员函数的话,系统送的这个this指针会再加一个限制,变成A const* const类型
所以在常成员函数里不能调用不是const类型的成员函数(涉及到指针权限下放的问题)
这样其实也确保了const函数里不可能修改类的数据成员,做到了绝对的只读

常成员函数的实现机制

其实就是检查指针(this指针的传递,权限不能下放)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值