C++中const的使用方法
Const修饰变量的主要含义是不能改变该变量的值,为实现最小特权的原则,用于修饰常量以及在函数参数中对其进行限定。
const修饰常量
const int maxvalue=100;
const修饰函数参数指针
为保持最小特权原则,在将指针传给函数的时候,根据函数对指针参数的需要的访问权限,通过const限定有四种方式:
指向非常量数据的非常量指针:可以通过引用指针修改数据,也可以修改该指针使其只想其他数据。
指向常量数据的非常量指针(const char *s):该指针可以被修改为指向其他数据,但是指针指向的数据不能被改变。可以用于传递大型对象,对象在作为参数传递时是按值传递,需要复制对象地址,但是通过指向常量数据的非常量指针,可以通过传递指针获得引用传递的效率,同时获得按值传递的安全性。(应用较广)
指向非常量数据的常量指针:int * const ptr=&x;和数组相同,数组名就是这么一个指针。同时,声明为const的指针必须被初始化。
指向常量数据的常量指针。
const对象、const成员函数和const成员变量
const Time noon(12,0,0)
使用const限定对象不可修改,任何对该对象的修改操作都导致编译错误。
对于const对象,不允许对成员函数调用,除非成员函数也声明为const,即使不修改对象的非const函数也不能被调用。其中,const成员函数必须不能修改对象,也就是说,在定义类的时候,如果某一成员函数不修改对象,可以将其声明为const函数。
声明const成员函数的方法是在声明中和函数定义中说明,在函数头参数列表后插入const关键词。
可以对const函数进行非const版本的重载,即const对象调用const函数,非congst对象调用非const函数。
不允许对构造函数和析构函数进行const声明,const对象的"常量性质"从构造函数完成对象初始化和析构函数开始之间这一过程,也就是说,构造函数和析构函数可以调用非const成员函数。
const成员变量是对象初始化以后不能被改变的变量,而且必须使用成员初始化器进行初始化。成员初始化器列表在构造函数体执行前被执行。
[cpp]
Class Increment
{
Public:
Increment(int c,int i);
Private :
Int count;
Const int increment;
}
Increment::Increment(int c,inti):
count(c),
increment(i)
{
}
[/cpp]