const常函数
对于类中的函数,若是定义了const,就成为了常函数;
const修饰函数承诺在本函数内部不会修改类内的数据成员,不会调用其它非 const 成员函数。
常函数可以使用数据成员,但是不能修改数据成员,对函数的功能有更明确的限定;
如:
class A{
private:
int a = 0;
public:
int change() const
//change()就成为了常函数
{
this->a = 1;
//常函数不能修改类中的数据成员,error
return a;
}
};
同时加了const定义的对象成为常对象,常对象只能调用常函数,如:
A const a;
a成为常对象,只能调用常函数
const指针
如下参考自《C++ primer plus》
const指针有两种不同的定义方法:
- 指向const常量对象的指针,防止使用该指针来修改所指向的值,如:
const float g_earth = 9.80
const float *pe = &g_earth
这种定义方法无法通过常量指针来修改所指向地址的内容,但是可以通过变量自身来修改(若是非const常量);
在C++中规定,禁止将const常量的地址赋予非const常量指针,也就是const常量的地址必须赋予常量指针; 非const常量的地址可以赋予给const常量指针; 这样因为若为一个非const常量指针赋予了const常量的地址,那么允许通过非const常量指针来修改const常量的内容,和const的定义相悖了;
- 将指针本身声明为常量,可以防止改变指针指向的位置,如:
int sloth = 3
int * const finger = &sloth
这样指针finger只能指向sloth,但是不影响使用finger来修改sloth的值(当然sloth需要是非const变量)
这里在补充一种方式:
double trouble = 2.0E30
const double * const stick = &trouble
这样stick只能指向trouble,并且也不能通过stick来修改trouble的值;
const指针的使用场景
我们在将指针变量作为参数来传递的时候,可以使用指向const的指针来保护传入的数据,这样在函数中是没有办法通过指针来修改传入的数据;
本文深入解析C++中的const修饰符,包括其在常函数、常对象、const指针中的应用,以及如何利用const指针保护数据不被修改,适用于C++初学者和进阶者。
1400

被折叠的 条评论
为什么被折叠?



