C++ const * 和 * const 有什么区别
首先给出答案,const 直接在变量的前面,表示这个变量是一个常量,不能被修改。 const 修饰的是指针变量的话,const * 表示指针指向的值是一个常量,不能被修改。
C++中 指针和其他的变量一样,都是存储数据的变量。
指针变量的值是一个地址,这个地址指向的是内存中的一个位置。
指针是存储地址的变量
需要引出两个概念:顶层const 和 底层 const
- 顶层const:指针(也可以是普通的变量)本身是一个常量,不能被修改
- 底层const:指针指向的值是一个常量,不能被修改
int a = 1;
int *const p1 = &a; // 顶层const
const b = 2;
const int *p2 = &b; // 底层const
对于普通的变量,只有顶层const
对于引用来说,引用本身就是一个常量,所以引用只有底层const,没有顶层const(加了会报错)
int a = 1;
int &b = a;
// int & const b = a; // 报错,'const' qualifiers cannot be applied to 'int&'
const int &c = a; // 底层const
函数的重载
顶层const不能有效重载函数,底层const可以有效重载函数
void func(int a) {
}
void func(const int a) { // 不能重载,报错'void func(int)' previously defined here
}
void func(int *a) { // 类型不同,可以重载
}
void func(int * const a) { // 不能重载
}
void func(const int *a) { // 可以重载
}
对类的成员函数来说:
class A {
public:
void func() {
}
void func() const { // const 修饰的是 this 指针,底层const
}
};