定义某一变量为常数,必须初始化,一旦定义不可再修改
假设指针p, 根据const在*左侧还是右侧判定。在左侧const int* p=&a;则指针指向的值a不可被改变,但指针内容可以变,如int b=10; p=&b;。在右侧,则指针内容不可修改,如之前指向变量a,那么只能一直指向a,不能改变。简单记忆就是左定值,右定向
const修饰成员变量,不能在声明时初始化,只能通过构造函数初始化,且不能通过赋值来初始化,唯一的格式如下
class A{
public:
const int Size;
A(int s);
~A();
};
A::A(int s):Size(s){}
//错误初始化!!!!!!!!!!
A::A(int s){Size=s;}
#include
class Year{
private: int y;
public: static int const Inity;
public: Year() { y=Inity; }
};
int const Year::Inity=1997;//静态变量的赋值方法,注意必须放在类外定义
void main(){
cout<<Year.Inity<<endl;//注意调用方式,这里是用类名调用的。
}
如const MyClass p;,该对象只能调用const成员函数,不能调用普通成员函数。
(1) const 在函数中根据修饰位置分为三种,const int fun(const int a) const
(2) const成员函数不可以修改对象的数据,不管对象是否具有const性质。它在编译时,以是否修改成员数据为依据,进行检查。
(3) 然而加上mutable修饰符的数据成员,对于任何情况下通过任何手段都可修改,自然此时的const成员函数是可以修改它的。