C++学习笔记(const)

C++中,经常可以看到用const修饰变量,修饰函数。现在,我们对const进行总结(不必死记硬背)

1、const修饰变量: int a=3;//定义整型变量a

     const int a=3;//表明a为常变量,a的值不能够被改变

2、const修饰引用

    const int &b=a;//b与a的地址相同,不能通过b来改变a的值,例如:b=5(错误)

    int const &b=a;//b与a的地址相同,不能通过b来改变a的值,例如:b=5(错误)

3、const修饰指针

    const int *p=&a;//不能通过指针来改变a的值,例如:*p=5(错误)

    int  const *p=&a;//不能通过指针来改变a的值,例如:*p=5(错误)

    int *const p=&a;//p的指向不能改变,例如:int b;p=&b(错误)

    const int *const p=&a// 不能通过指针来改变a的值,同时p的指向不能改变;

const的意思是常量,因此,我们可以理解为“不变的”,上述情况,我们可以&或者*为界,看const距离谁近,const就修饰谁。例如:int *const p=&a;const距离p近,修饰指针p,表明指针p不能改变其指向。

4、const修饰函数(假设定义Test类,数据成员为data,成员函数为void show(Test *const p))

    void show(Test *const p)const

表明该函数为常函数,在程序内部该函数相当于void show(Test *const this,const Test *const p),就是将函数外面的const拿到了第二个参数的前面(成员函数都默认含有第一个参数,即this指针)。该函数的参数表明:不能在函数内部更改指针p的指向,同时,也不能在函数内部通过指针p修改传递给形参的数据。下面定义Test类,讨论常函数和普通的成员函数之间的相互调用问题:

#include<iostream>
using namespace std;
class Test
{
public:
Test(int d)
{
data=d;
}
void show()const
{

}
void caculate()
{

}
private:
int data;
};
int main()
{
Test t1(10);

}

现在我们在show()函数的内部调用caculate()会提示有错误,原因是show( )函数是常函数,函数实际为show(const Test *const this),因此,此函数不希望修改data数据,但是caculate( )函数可能会修改data数据(本来不可以修改,但是最后可能会被修改),因此,会报错。相反,在caculate( )函数内部调用show( )函数,不会报错,原因在于caculate( Test *const this)表明可以修改data数据,而show(const Test *const this)表明不可以修改data数据(可以修改或不修改,但是最后保证其不修改)。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值