const是用于保护程序的健壮性,减少程序隐患。其用法比较复杂,总结起来又分为以下两种:
1:在定义变量时使用:
大概有下面三种常见的用法:
One:
int const k;
const int k;
上面两表达式功能相同,这是最简单的用法,说明变量a是一个常变量.
Two:
int const *k;
const int *k;
上面两表达式功能相同,这是很常用的用法,指向常数的指针,即指针本身的值是可以改变的,但指向的内容是不能改变的
example:
int i,j;
const int *k=&i;
*k = 100; //非法
k = &j; //合法
Three:
int *const k;
常指针,即指针本身的值是不可改变的,但指向的内容是可改变的.
example:
int i,j;
const int *k=&i;
*k = 100; //合法
k = &j; //非法
2:在函数用使用:
One:
void func(const int);
做为参数使用,说明函数体内是 不能修改该参数的;对不参数定义时不同的形式,可参见定义变量
时使用方式;
Two:
const int func();
做为返回值使用,说明函数的返回值是不能被修改的,在取得返回值时应用const int a = func();对不同
参数定义时使用不同的形式,可参见定义变量时使用方式;
Three:
int func() const;
常函数,说明函数是不能修改类中成员的值的,[注意]只能用于类的成员函数中.
[附]
const_cast 用法:const_cast<type_id> (expression) [注意] 关键字mutable 可代替const_cast的使用[略]
该运算符用来修改类型的const或volatile属性。除了const 或volatile修饰之外, type_id和expression的类型是一样的。
常量指针被转化成非常量指针,并且仍然指向原来的对象;
常量引用被转换成非常量引用,并且仍然指向原来的对象;常量对象被转换成非常量对象。
Voiatile和const类试。举如下一例:
class B{
public:
int m_iNum;
}
void foo(){
const B b1;
b1.m_iNum = 100; //comile error
B b2 = const_cast<B>(b1);
b2. m_iNum = 200; //fine
}
上面的代码编译时会报错,因为b1是一个常量对象,不能对它进行改变;
使用const_cast把它转换成一个常量对象,就可以对它的数据成员任意改变。注意:b1和b2是两个不同的对象