C++ 中 const 的基本用法
基本用法:
const限定符用来处理符号常量,比如在程序中输入以下代码:
const int Months=12;
这样就可以在程序中用Months来替代12(12可以代表的含义有很多,使用Months可以指出12的含义是什么)
特点:
-
常量一旦被初始化之后,其值固定,不被允许修改
-
由于常量不被允许修改,所以应当在声明时对const进行初始化,以下代码会报错:
const int Months;
Months=12;
const和define
-
const可以指明常量的类型
-
const可以将定义限制在特定的函数或者文件中
-
const可以用于更加复杂的类型,如数组
enum与const(强行算是和const沾边吧)
enum也可以创建符号常量,可以用来替代const,并且允许定义新类型
enum week{Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday};
-
week被作为一个新的类型的名称使用,被称为枚举
-
Monday,Tuesday等被作为符号常量,对应整数0~6,被称为枚举量
-
枚举只定义了赋值运算符,并且只能被枚举量赋值,没有定义算数运算符,因此以下语句中第二条有效,第三四条无效
week today;
today=Sunday; //valid
today=1; //invalid
today++; //invalid
const与指针
const使用的必要性:
首先使用const可以避免无意中对数据修改造成的错误,其次const的使用使得函数可以处理const和非cosnt实参,否则就只能接受非const数据
-
让指针指向常量对象,防止使用该指针修改所指向的值
-
将指针声明为常量,防止改变指针指向的位置
-
我们可以把const的地址赋值给const指针,但是不能把const的地址赋值给普通指针
const int week=7;
const int * pw=&week;
const int week=7;
int * pw=&week;
第一种情况下是合法的,并且week本身不能改变值,也不能够通过pw来改变week的值
第二种情况是不符合语法规范的
-
C++中允许非const指针赋值给const指针,但是仅仅当只有一层间接关系的时候(如指针指向基本数据类型时),才能够把非const指针的地址赋值给const指针
const与函数
与指针类似的是,当我我们希望通过使用引用传递一个参数给函数使用并且保证这个数据不被修改的时候,我们就需要使用const
例如希望返回a+b的结果,并且不改变ab值,那么我们在函数原型和函数头中应使用const
int sum(const int &a,const int &b);
const与返回对象
我们看下面的例子:假设现在我们有一个类叫做Integer,现在我们需要编写函数Max,使得它返回两个对象中更大的一个,有以下两种写法:
//返回对象
Integer Max(const Integer & a,const Integer & b)
{
if(a>b)
return a;
else
return b;
}
//返回const对象的引用
const Integer & Max(const Integer & a,const Integer &b)
{
if(a>b)
return a;
else
return b;
}
在以上两种写法中,第一种写法返回对象,返回时需要调用类的复制构造函数,第二种写法返回一个引用,可以直接赋值不需要调用复制构造函数,所以第二种效率更高,并且因为ab都是const,所以返回引用也应该是const。