在函数前后的区别
在函数中:防止参数在函数体中被修改
void Func(int a){
a=2;
}
//若希望a不能在函数体中被修改,加const
void Func(const int a){
//a=2;该操作会报错
}
在函数前:约束函数的返回值,返回值为const,不能为左值。
防止返回值直接被赋值,但是可以赋值给别的变量,一般变量无法体现其不能为左值的性质。
函数返回类型为指针类型时,可以通过指针对返回值进行修改。
const int Sum1(int a,int b){
return a+b;
}
const int* Sum2(int a,int b) {
int* n = new int;
*n = a + b;
return n;
}
int main(){
int c1 = Sum1(1,2);
c1=5;//可以运行,无法体现
int* c = Sum2(1, 2);
//c = 2; 报错,不能修改常对象
}
在函数后:在类中使用,表示函数不可修改class 中的成员
//在成员函数后面加const,修饰的是this指针,让指针指向的值也不可以修改
class Student{
public:
void show() const
{
//this->name = "Jerry"; 报错,不可修改成员变量
age = 10; //使用了mutable关键字,不报错
//this = NULL;指针指向不可修改
}
string name;
mutable int age;//特殊变量,即使在常函数中也可以修改这个值,加关键字mutable
};
在指针中的区别
常量指针: const修饰指针,指针指向的值不可以改,指针的指向可以改
int a = 10;
int b = 10;
const int* p = &a;
//*p=20; 错误
p = &b;//正确
指针常量: const 修饰常量,指针的指向不可以改,指针指向的值可以改
int a = 10;
int b = 10;
int* const p2 = &a;
*p2 = 100;//正确
//p2 = &b;错误
const修饰指针和常量,指针的指向和指针指向的值都不可以改
int a = 10;
int b = 10;
const int *const p3 = &a;
//*p3 = 100; 错误
//p3 = &b;
tips:看const右侧紧跟着的是指针还是常量,是指针就是常量指针,是常量就是指针常量