C++基础之const关键字作用学习
[TOC]
概述
文章参考:https://zhuanlan.zhihu.com/p/37514756
文章参考:https://zhuanlan.zhihu.com/p/103215046
文章参考:https://www.zhihu.com/question/35614219
定义变量时的限定符,表示变量值不能改变。
1 | const int bufSize = 512; |
由于const一旦创建就不可更改,所以const对象必须初始化(否则定义一个默认值且不可修改的变量没有任何意义)。
1 | const int i = get_size(); // 正确 |
使用值传递初始化时,被初始化的对象是否为const与初始化对象是否为const无关。也即,const对象与非const对象可以互为初始化。
const修饰一个变量时,一定要给这个变量初始化,若不初始化,在后面也不能初始化。
const作用:
- 可以用来定义常量,修饰函数参数,修饰函数返回值 ,且被const修饰的东西,都受到强制保护,可以预防其它代码无意识的进行修改,从而提高了程序的健壮性(是指系统对于规范要求以外的输入能够判断这个输入不符合规范要求,并能有合理的处理方式。ps:即所谓高手写的程序不容易死);
- 使编译器保护那些不希望被修改的参数,防止无意代码的修改,减少bug;
- 给读代码的人传递有用的信息,声明一个参数,是为了告诉用户这个参数的应用目的;
const修饰指针变量
- const 修饰指针指向的内容,指针常量,内容为不可变量
- const 修饰指针,则指针为不可变量,即常量指针
- const 修饰指针和指针指向的内容,则指针和指针指向的内容都为不可变量
1 | 例: |
const 修饰的指针变量称为 常量指针
类型去掉, *p当做一个整体 指针的解引用,就是p所指向的值,const修饰的是值,所以指针指向的值不可以更改,指针的指向可以改.
1 | 例: |
const 修饰的指针变量称为 指针常量
类型去掉, const修饰的是一个指针,所以指针指向不可以更改,指针的指向的值可以改.
const优点:
- 编译器可以对const进行类型安全检查(所谓的类型安全检查,能将程序集间彼此隔离开来,这种隔离能确保程序集彼此间不会产生负面影响,提高程序的可读性);
- 有些集成化的调试工具可以对const常量进行调试,使编译器对处理内容有了更多的了解,消除了一些隐患。eg:void hanshu(const int i){…….} 编译器就会知道i是一个不允许被修改的常量
- 可以节省空间,避免不必要的内存分配,因为编译器通常不为const常量分配内存空间,而是将它保存在符号表中,这样就没有了存储于读内存的操作,使效率也得以提高;
- 可以很方便的进行参数的修改和调整,同时避免意义模糊的数字出现
const 和 constexpr 的区别
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 麦溪·在路上!
评论
ValineDisqus