📅  最后修改于: 2023-12-03 14:59:37.080000             🧑  作者: Mango
在C++中,const
是一个关键字,用于表示一个变量或对象是不可修改的。同时,const
也可以用于函数参数、函数返回值、成员函数等。
定义一个const
变量可以通过在变量前加const
关键字来实现:
const int i = 10; //定义一个常量i为10
这里的const
关键字告诉编译器,变量i
是不可修改的。试图修改变量i
的操作将会导致编译错误。
const
修饰的变量,不仅可以是内置类型,也可以是自定义类型:
class MyClass {
public:
void SetX(int x) const { _x = x; } //不合法
int GetX() const { return _x; } //合法
private:
int _x;
};
const MyClass obj; //定义一个不可更改的对象obj
obj.GetX(); //合法
obj.SetX(10); //不合法:void MyClass::SetX(int) const" (隐式转换类型没有合适的可调用函数)
这里的const
关键字告诉编译器,成员函数无法修改对象的状态。试图修改对象的状态的操作将会导致编译错误。
指向常量的指针和常量指针是两个不同的概念。
指向常量的指针可以通过以下方式定义:
const int* p; //指向常量的指针
p
是一个指向常量的指针,指针所指向的内存单元是不可修改的,但是指针本身可以被修改。例如:
int x = 10;
const int* p = &x; //p指向的内存单元是只读的
这里,指针p
指向变量x
,但是无法通过指针p
修改变量x
的值:
*p = 20; //不合法
而常量指针可以通过以下方式定义:
int x = 10;
int* const p = &x; //常量指针
p
是一个常量指针,指针本身是不可修改的,但是指针所指向的内存单元是可修改的,例如:
int x = 10;
int* const p = &x; //p指向变量x,并且p本身是不可修改的
*p = 20;
这里,通过指针p
修改了变量x
的值。
在函数参数中使用const
可以使得函数不会对参数进行修改。例如:
void DoSomething(const int x) //x是const int类型的参数
{
//do something
}
void DoSomething(const MyClass& obj) //obj是const MyClass类型的引用参数
{
//do something
}
这里的const
告诉函数,函数不会修改参数x
或者obj
。
在函数返回值中使用const
可以防止返回值被修改。例如:
const MyClass& GetMyClass()
{
static MyClass obj;
return obj;
}
这里的const
告诉编译器,返回值是不可修改的。
在成员函数中使用const
可以使得函数不会修改对象的状态。例如:
class MyClass {
public:
void DoSomething() //普通的成员函数
{
_x = 1; //可以修改对象的状态
}
int GetX() const //const成员函数
{
return _x; //不会修改对象的状态
}
private:
int _x;
};
这里的const
告诉编译器,成员函数不会修改对象的状态。
const
关键字可以用于变量、指针、函数参数、函数返回值、成员函数等不同的场合,可以有效地保护程序的安全性和稳定性。在开发中合理使用const
关键字,有利于提高代码的可读性和可维护性。