更多精彩内容可阅读: C/C++ 关键字专栏
📌作用:用于定义常量变量,**定义时必须初始化变量,定义后就不可再被修改.
const 关键字的作用
- 用于修饰函数形参,保护参数使其不被修改。
1.指针传递,不可改值,可以改指针指向地址
2.引用传递,不可改值。 - 节约内存空间
const定义的变量,系统只为它分配一次内存,相比于宏定义(不会分配内存,但会为多个字符串替换). - 用于修饰函数返回值,防止返回值被修改。
接收返回值的变量也必须加const。 - 在另一连接文件文件中引用常量,extern const int i;
const 关键字的使用场景
const修饰指针
const int *A; 或 int const *A; //const修饰指向的对象,A可变,A指向的对象不可变 . int *const A; //const修饰指针A, A不可变,A指向的对象可变 const int *const A; //指针A和A指向的对象都不可变
int * const p=&a; //const修饰的指针不可改变指向,且必须初始化。
const修饰对象(常对象)
常对象指该对象在其生命周期内,其所有的数据成员的值都不能被改变.
一旦将对象定义为常对象之后,只能调用类的 const 成员(包括 const 成员变量和 const 成员函数)。
const修饰类的成员方法(常成员函数)
const 修饰的成员函数
- 可以访问所有成员变量但不能修改其值,
- 只能调用常成员函数不能调用非 const 修饰的函数.
const修饰类的成员变量
- 初始化const int类型(不包含static类型)
- 初始化方式一:构造函数初始化列表方式(C++98)
- 初始化方式二:类内初始化(c++11支持)
- 初始化const static int类型
- 初始化方式一:类的构造函数上初始化(c++11支持).
- 初始化方式二:在类外初始化,类外初始化时不必指明static属性(static原则).
const 关键字的使用事项
- 指针间传递
C语言中,const int * 和const int复制给int * 会舍弃const,C++不允许这样的操作(遵守底层const原则)。
将int * 赋值给const int * 类型则没问题。 - 通过指针的指向const变量可以间接改变其值.
- 构造函数不能被声明为const
- const成员函数若返回对象引用,也必须是const 类型(否则会报错)
error: binding reference of type 'class' to value of type 'const class' drops 'const' qualifier
- 将数据声明为可变数据成员
在C++语言中,mutable
是使用较少的关键字,
它的作用是:如果一个函数被const
修饰,那么它将无法修改其成员变量的,但是如果一个成员变量是被mutable
修饰的话,则可以修改。mutable
可以用来指出,即使成员函数或者类变量为const
,其某个成员也可以被修改。反过来说,可变数据成员永远不能成为const
,即使它是const
对象的成员。
const 关键字的使用示例
class A { public: const int a; A(int x):a(x)//正确 { a = x;//错误 } };
int x; mutable int y; A(int a, int b):x(a),y(b){} }; int main() { const A a(0, 0); // const对象必须初始化 a.x = 1; // 错误 a.y = 2; // 正确,mutable修饰使得成员可被修改,即使对象a为const return 0; }
结语
在我们的编程学习之旅中,理解是我们迈向更高层次的重要一步。然而,掌握新技能、新理念,始终需要时间和坚持。从心理学的角度看,学习往往伴随着不断的试错和调整,这就像是我们的大脑在逐渐优化其解决问题的“算法”。
这就是为什么当我们遇到错误,我们应该将其视为学习和进步的机会,而不仅仅是困扰。通过理解和解决这些问题,我们不仅可以修复当前的代码,更可以提升我们的编程能力,防止在未来的项目中犯相同的错误。
我鼓励大家积极参与进来,不断提升自己的编程技术。无论你是初学者还是有经验的开发者,我希望我的博客能对你的学习之路有所帮助。如果你觉得这篇文章有用,不妨点击收藏,或者留下你的评论分享你的见解和经验,也欢迎你对我博客的内容提出建议和问题。每一次的点赞、评论、分享和关注都是对我的最大支持,也是对我持续分享和创作的动力。