文章目录
一、 普通变量用const
//表示n本身不可修改,是常量
const int n =1
二、 指针用const
//用法1:表示不可以通过指针pt修改a,但是a可修改
int a = 3;
const int * pt = &a;
//用法2:a本身不可修改,因此也不可以通过指针修改a,如果指针没有const会报错
const int a = 3;
const int *pt = &a;
//用法3:表示指针pt的值不可以修改,pt初始化时需要绑定一个地址,之后不可修改,和这个地址绑定
int a = 4;
int * const pt = &a;
三、函数返回值加const(对指针和引用有意义)
//用法1:返回引用值加const:表示返回的引用值的内存空间不可修改,即无法出现
//foo(a, b) = c的情况
const int &foo(int &a, int &b)
//**用法2:表示返回值是一个整型常量,但是这里使用const没有意义,这里函数会把返回值复制到外部的临时存储单元中,加const没有意义
const int foo(int a ,int b)
//用法3:这个时候表示不可使用返回的地址对内容进行修改
const int * foo(int a, int b);
const int * a = foo(ads, df);
四、函数参数加const(仅对指针和引用有意义)
//两种情况:1.表示a和b(对应的数组)在函数内都不可修改;
//2.传入参数本身为const类型
void foo(const char * a , const int * b)
//常用点的引用搭配:就是这两个引用的对象值函数中不可修改
void foo(const A & a, const B & b)
五、函数后面加const
class P
{
public:
int GetX() const; //常成员函数,不可改变成员变量的值
int GetY() const;
void Set(int, int);
void Offset(int, int);
private:
int xVal, yVal;
};
六、const * & *const
简单来说就是const*
指向的地址的值不允许修改,const* a
等价于 const (*a)
,而 *const
则是告诉编译器这个指针变量指向的地址是确定的,指针不能改,但是指针指向的值可以改
七、其它
类似const int 的变量可以直接赋值给int,但是const int *的指针只能赋值给const int *的指针,指针情况和引用类似