在总结const的用法时,我们先简单介绍一下const的概念!
const可以修饰变量,使该变量的值不能改变(即就是可以用来定义常量),而宏常量#define(预编译指令)也可以用来定义常量,这里我们将二者做一个简单的对比。
(1)const常量有数据类型,#define没有数据类型;
(2)const可以保护被修饰的东西,防止其被意外修改,可以增强程序的健壮性;
#define只进行字符替换,没有类型安全检查,在字符替换过程中可能会出现一些错误,例如:边界问题;
(3)通常情况下,编译器不会为const常量分配存储空间,而是将其保存在符号表中,作为编译期间的一个常量,不会占用内存 以及不进行读操作,效率自然很高;
(4)有些集成化的调试工具可以对const常量进行调试,但不能对宏常量进行调试。(另外,在C++中,只使用const常量而不 使用宏常量,即const常量可以完全替代宏常量)。
有了以上的铺垫,我们来看一看const的用法吧!
一、const修饰常量
举例:
const char* str = "abcdefg";
如果没有const修饰,我们可以在这个字符串后面任意加一些其他的字符串,这样会导致只读存储区域被赋值,接着程序会马上异常终止;但是加上const之后,这样的错误会在程序编译阶段检测出来(即就是,让逻辑错误在编译期间被检测出来)。
二、const修饰变量
1.局部变量
举例:
const int a = 10;
int const a = 10;
以上两种表达形式都是一个意思,指的是变量a的值是10不能被改变了(常变量)。
但这里需要注意的是,con