文档介绍:1.     const 用于定义常量,定义时必须进行初始化,一经定义不能修改。
2.     const用作函数参数:
1)  指针参数:
const 在 * 的左边,表示该指针的数据不能改变,但是地址可以改变。
例如:void fun(const int *p)
{
*p = 10; //非法,不能改变指针p的数据
int num(20);
p = # //合法,可以改变p指向的地址,同时改变了p的数据,此时*p = 20
}
const 在 * 的右边,表示该指针的地址不能改变,但是数据可以改变。
例如:void fun(int * const p)
{
*p = 10; //合法,改变了指针p的数据
int num(20);
p = # //非法,不能改变p指向的地址
}
2)  引用参数:
const 作为引用参数时,只可以将其值赋给其他变量,不能修改其数值。
例如:void fun(const int &p)
{
int i;
i = p; //合法,将 p的数值赋给了变量i
p = 10; //非法,不能改变p的数值
}
3.     const 用作类的成员函数
1)const 修饰类的成员函数时,必须写在函数的后面。
例如:class Test;
void Test::fun(void) const
2)const成员函数可以调用类中const成员函数,不能调用非const成员函数。
例如:void Test::gun(void);
void Test::hun(void) const
void Test::fun(void) const
{
gun( ); //非法,不能调用非const成员函数
hun( ); //合法,可以调用const成员函数
}
3)const 对象可以调用类中const成员函数,但是不能调用非const成员函数。
例如: void Test::gun(void);
void Test::fun(void) const;
Test A;
( ) //非法,不能调用非const成员函数
( ); //合法,可以调用const成员函数
4)类中非const 对象和非const 成员函数都可以调用const成员函数。
例如: void Test::fun(void) const;
void Test::gun(void)
{
Fun( ); //合法,可以调用const成员函数
}
Test A;
( ); //合法,可以调用const成员函数
5)总结:类的对象和成员函数之间调用关系作如下表格。
对象调用成员函数
成员函数调用成员函数
对象
成员函数
合法/非法
调用者
被调用者
合法/非法
const
const
合法
const
const
合法
const
non-const
非法
const
non-const
非法
non-const
const
合法
non-const
const
合法
non-const
non