const的用法
常量声明
const用于声明时必须进行初始化
,大致格式为:<数据类型> const <常量名> = <值>
或 const <数据类型><常量名> = <值>
。此时const的位置不影响语义
声明一个常量:
const 可以用于声明一个变量为常量。
常量的值在声明后不能被修改
cpp
int const a = 10; // read-only variable
int const b; // 错误!!!必须进行初始化
a++; // 错误!!!不能对值进行更改
const int c = 10; // read-only variable
声明类的成员变量为常量
在类的声明中,可以使用 const 来声明成员变量为常量。
这意味着不能修改这些成员的值
cpp
class MyClass {
public:
int const a = 1; // read-only variable
int const b; // 错误!!!必须进行初始化
const int c = 1; // read-only variable
void func();
void print_a();
};
void MyClass::func() {
this->a++; // 错误!!!不能对值进行更改
}
void MyClass::print_a() {
cout<<"a = "<<a<<endl;
}
int main() {
MyClass c;
return 0;
}
声明常量数组:
const修饰数组。
那么数组中的所有元素都被视为常量,不能被修改
cpp
int const arrayA[5] = {1, 2, 3, 4, 5};
int const arrayB[5]; // 错误!!!必须进行初始化
A[0] = 5; // 错误!!!数组中所有值能进行更改
const int arrayC[4]={1,2,3};
const和指针搭配
此时const的位置不同将会导致语义不同
声明常量指针
const 可以用于指针的声明。
表明指针的值不可更改,即指向不可更改
指针是一种特殊的数据类型
,指针的值是某个数据的内存地址
,即指针指向该数据
cpp
int a = 10;
int b = 20;
int* const ptr = &a;
int* const p; // 错误!!!常量指针声明时必须初始化
ptr = &b; // 错误!!!常量的值初始化后不可改变,即常量指针的指向不可更改
声明指针常量
此时指针的值可以改变,即指针指向可以更改,
但是指向的内存地址保存的内容不可更改
可以这么理解,由于 const int
和 int cosnt
语义相同,
那么int const* ptr = &a;
和 const int* ptr = &a;
语义相同。const修饰的是* ptr
cpp
int a = 10;
int b = 20;
int const* ptr = &a; // 等价于 const int* ptr = &a;
函数中,声明参数变量为常量
const 可以用于函数参数的声明,
该参数不能被修改,可以防止意外修改传入的参数值
cpp
void print(const int& num) { //调用函数时已经对参数进行初始化了
num++; // 错误!!!不能对值进行更改
cout << num << endl;
}
// 也可以这样
void print(int const& num) { //调用函数时已经对参数进行初始化了
num++; // 错误!!!不能对值进行更改
cout << num << endl;
}
声明常量类成员函数
常量类成员函数不可以修改所有的成员变量
c
class myClass {
public:
// const int a = 1;
int age;
void setAge() const;
void changeAge();
};
void myClass::setAge() const{
age = 10; // 错误!!!常量类成员函数不可以修改所有的成员变量
}
void myClass::changeAge() {
age = 10;
}