const
1、是什么?
在C++中,const 是一种关键字,用于指定常量或表示不可修改
1.1 修饰变量
声明常量:通过在变量声明前加上const关键字,可以将变量声明为常量,即其值不能被修改。
const int x = 5; // 声明一个常量x,其值为5,不可修改
防止意外修改:将变量声明为 const 可以防止意外的修改,提高代码的可靠性和可维护性。
1.2 修饰函数参数
函数参数为只读:将函数参数声明为const表示函数内部不会修改该参数的值。
void func(const int x) {
// x 是只读参数,不可修改
}
1.3 修饰函数返回值
返回值为只读:将函数返回值声明为const表示返回值为只读,不能被修改。
const int getValue() {
return 42;
}
#include <iostream>using namespace std;class A {
private:int num;
public:A() : num(2) {}void set_num() {this->num = 10;}void get_num() const {printf("%d\\n", num);}
};class B {
public:const class A *get() {class A *p = new A();return p;}
};int main() {B b;b.get()->get_num();b.get()->set_num(); // 编译失败,因为返回的对象是const修饰,所以不允许修改成员return 0;
}
1.4 修饰类成员
常量成员变量:在类中使用 const 声明的成员变量是类的常量成员,一旦初始化后就不能修改
常量成员函数:在类中使用 const 修饰的成员函数表示该函数不会修改类的成员变量
class MyClass {
private:const int value; // 声明一个常量成员变量public:int getValue() const {return value; // 常量成员函数,不能修改非静态成员变量}
};
1.5 修饰指针
const在 * 右侧:表示指针本身是一个常量,即指针指向的内存地址不能修改。
int x = 5;
int* const ptr = &x; // ptr 是一个指向整型变量的常量指针
*ptr = 10; // 可以修改指针指向的值
ptr++; // 错误,指针本身是一个常量,不能修改指向的地址
const在 * 左边:表示指针指向的值是一个常量,即指针所指向的内存地址的值不能修改。
int x = 5;
const int* ptr = &x; // ptr 是一个指向常量整型的指针
*ptr = 10; // 错误,不能修改指针指向的值
ptr++; // 可以修改指针指向的地址
const在 * 左右都有:表示指针本身是常量,且指针指向的对象也是常量。
const int x = 5;
const int* const ptr = &x; // ptr 是一个指向常量整型的常量指针
*ptr = 10; // 错误,不能通过指针修改 x 的值
ptr++; // 错误,指针本身和指向的对象都是常量
使用 const 的好处:
提高代码的可读性:通过明确标识常量和只读的对象,使代码更易于理解和维护。
防止意外修改:将对象声明为 const 可以防止在代码中无意中修改其值,提高代码的稳定性和可靠性。
编译器优化:编译器可以使用 const 信息进行优化,提高代码的执行效率。
需要注意的是,const 对象必须在声明时进行初始化,并且其值在编译时就确定了,不能在运行时修改。
在编写代码时,合理使用 const 可以提高代码的可读性、可靠性和性能。通过将对象声明为 const,可以明确指示其只读特性,并减少意外的修改,从而提高代码的质量和可维护性。