一、概念
const
是一个关键字,用于声明常量和指定函数参数、函数返回值等为常量。
二、const的使用
1、const修饰基本数据类型
1.1、const修饰一般变量及数组
int const a1 =100;
const int a2=200;
char const arr1[3]={1,2,3};
const char arr2[3]={4,5,6};
a1=20; //error
a2=30; //error
arr1[0]=9; //error
arr2[2]=10; //error
1.2、const修饰指针(*)
- 指针常量(修饰指针)
int value = 10;
int* const ptr = &value;
*ptr = 20; // 通过指针修改值
ptr = nullptr; // 不能修改指针指向的地址
- 常量指针(修饰指针指向的对象)
int value = 10;
int valueB = 20;
const int* ptr = &value;
value = 20; // 可以通过原始变量修改值
//*ptr = 30; // 不能通过指针修改值
ptr = &valueB; //可以指向其他的对象
- 同时修饰指针本身和指针所指向的对象
const int value = 10;
const int* const ptr = &value;
*ptr = 20; // 不能通过指针修改值
ptr = nullptr; // 不能修改指针指向的地址
2、const修饰函数
const int func(const int a,const intb) const;
2.1、const 修饰函数返回值
表示返回的值是一个常量。这样的函数可以返回一个常量值,保护返回值不被修改。
class MyClass {
private:
int value;
public:
const int getValue() {
return value; // 返回一个常量值
//需要使用const 修饰的对象接收
}
};
2.2、const修饰函数的参数
- 常量参数表示函数不会修改该参数的值。
- 常量参数可以接受常量值、非常量值以及字面值作为参数。
- 在函数内部,常量参数的值不能被修改。
void printValue(const int num) {
// 不能修改num的值
cout << num << endl;
}
2.3、const修饰成员函数
-
const函数不能修改成员变量的值。
-
const对象只能访问const成员函数,非const的对象可以访问任何成员函数。
-
常量成员函数只能调用其他常量成员函数和常量对象,不能调用非常量成员函数。
-
常量成员函数内部不能修改类的成员变量,除非该成员变量被声明为
mutable
。 -
如果两个函数仅常量性不同是可以构成重载的。
class MyClass {
private:
int value;
public:
int getValue() const {
return value; // 可以读取成员变量
}
void setValue(int newValue) {
value = newValue; // 可以修改成员变量
}
};