const表示可读,但不能修改
修饰的内容不同,自然有不同的作用
1.const 修饰变量
a. const 修饰局部变量
const int a; // 编译错误,未初始化
const int a = 1;
int& a = 10; // 编译错误,非常量引用的初始值必须为左值
const int& a = 10;
b. const 修饰指针变量(顶层const)
指针的指向不可变,指针指向的值可变
int* const a; // 编译错误,未初始化
int b = 3;
int* const a = &b;
int c = 4;
a = &c; // 编译错误,表达式必须是可修改的左值
c. const 修饰指向指针的变量(底层const)
指针指向的值不可变,指针的指向可变
// todo
// 引用
const指针和指向const变量的指针,在写法上容易使人混淆。给大家介绍一种我自己用着比较顺手的区分方法:从右向左,依次结合,const就近结合。
比如,int * const p 可以这样进行解读:
1、int * ( const p ):变量p 经过 const 修饰,为只读变量。
2、int (* (const p)):(const p 现在作为一个整体) 只读变量p是一个指针。
3、(int (* (const p))):(同样的 * const p 作为一个整体) 这个只读的指针p,指向一个int型变量。
2. const 修饰函数
a. const 修饰函数参数
函数内部不能修改值
修饰形参指针也同上
void foo(const int val); // foo中不可修改val
b. const 修饰函数返回值
函数返回const返回值,主要用于函数返回const引用。
const int foo()
{
int a = 1;
return a;
}
3. const 修饰类
a. const 修饰类成员
同修饰变量
class A
{
const int a = 0;
};
b. const 修饰成员函数
const成员函数指的是,此函数不应该修改任何成员变量;但是mutable 修饰的变量可以被修改
传给const成员函数的this指针,是指向 const 对象 的 const 指针。
class A
{
int a;
int getA const()
{
return a;
}
};
PS: 静态成员变量并不属于某个类对象,而是整个类共有的。静态成员变量可以不依附于某个实例化后的类对象进行访问。那么,静态成员变量的值,应该在任何实例化操作之前,就能够进行改变(否则,只有实例化至少一个对象,才能访问静态成员)。所以,静态成员变量不能够由构造函数进行内存分配,而应该在类外部单独定义,在实例化任何对象之前,就开辟好空间。又由于 const 成员变量 必须初始化,所以静态成员变量必须在定义的时候就初始化。
c. const 修饰类实例
const类对象指的是,此类对象不应该被改变。
类对象的 “改变” 定义:改变任何成员变量的值,调用任何非const成员函数
深入理解C++中的const关键字及其在变量、指针、函数和类中的应用
本文详细介绍了C++中const关键字的作用,包括修饰局部变量、指针、函数参数和返回值、类成员及静态成员。重点讲解了const修饰的规则和常量引用的区别,以及const类对象的概念和限制。

被折叠的 条评论
为什么被折叠?



