1.关于const修饰的变量
int b=500
const int * a=&b;
int const * a=&b;
int * const a=&b;
const int * const a=&b;
const在星号的左边,则const修饰指针所指向的变量,即指针指向常量
const在星号的右边,则const修饰指针,即指针是常量
所以,在情况一、二下
*a=600 错误
int c=600;
a=&c 正确
这种情况,可以先不进行初始化
const int *a;正确
对于情况三
int * const a;//错误,因为没有初始化
int *const a=&b;//正确
*a=600; //正确
a=&c//错误
对于情况四
指针和指针所指向的内容均为常量
2.关于const修饰的成员函数
const在函数后修饰:函数不能改变变量的值或者引用一个非const成员函数
const在函数前修饰:返回常量
mutable修饰成员变量名后,就可以在const函数里修改成员变量了
class Point
{
int x,y;
public:
int GetY() const;
}
//关键字必须用同样的方式重复出现在函数实现里,否则编译器会把它看成一个不同的函数
int Point::GetY() const
{
return y;
}
3.const 与#defined相比有什么不同
(1)const有数据类型 而defined没有
(2)const会进行类型安全检查,defined只进行简单的字符替换,容易出现错误
(3)某些调试工具可以对const常量进行调试,但是不能对宏常量进行调试