//test const 使用细则class Game{public:int a;};void function(const Game 1; //×内容不可变}void function(const string "test";//s tmp; //×内容不可变}int _tmain(int argc, _TCHAR* argv[]){//1. 定义常量(两种本质相同都是定义常量)const int a 100;int const b 100;//a 1; //错误//b 1; //错误//2. 指针(*在const左侧则则表示指针不可变, 右侧表示内容不可改)char cDataA[100];char cDataB[100];char cDataC[100];char cDataD[100];char* const pDataA cDataA; //定义指针常量//pDataA cDataB; //×指针为常量不可以变pDataA[0] A; //√内容可变const char* pDataB cDataA; //指针指向内容不可以改变pDataB cDataB; //√指针可变//pDataB[0] B; //×内容不可变char const *pDataC cDataC;pDataC cDataB; //√指针可变//pDataC[0] A; //×内容不可变const char* const pDataD cDataD;//pDataD cDataB; //×指针为常量不可以变//pDataD[0] A; //×内容不可变//3. 函数中使用常量//void function(const int a); //a为形参调用时会自动拷贝无意义(注意仅限于基本类型[int,bool,float])//void function(const char* p); //p所指内容不可改变这个经常要用到//void function(char* const p); //p为形参调用时会自动拷贝无意义//void function(const Class //此做法是为了提高效率实际a为地址不对原对象进行拷贝传递,a中内容不可变//void function(const Type //此做法是为了提高效率实际a为地址不对原对象进行拷贝传递,a中内容不可变//4. 类中使用常量class ClassA{public: const int a;char* const p;int b;public:ClassA(int x, char* ptr):a(x),p(ptr) //√初始化序列中可以更改常量值{//a x; //×a的初始化只能在初始化序列中}int GetAValue() const //函数后边加const表示此函数不改变类成员变量{if(a>0)return a; //√返回成员变量是允许的return b; //√返回常量也是可以的}void SetAValue(int v) const{//a v; //×不能改变常量参数//b v; //×函数声明为const不能改变类中成员变量的值}void SetBValue(int v){b v;}};const ClassA CA(10,NULL);CA.GetAValue(); //√常量对象可以调用常量对象方法//CA.SetBValue(1); //×常量对象不能调用非常量(const)函数const ClassA* pCA new ClassA(10, NULL); pCA->GetAValue(); //√常量对象可以调用常量对象方法//pCA->SetBValue(1); //×常量对象不能调用非常量(const)函数ClassA NA(10, NULL);NA.GetAValue(); //√非常量对象可以调用常量对象方法NA.SetBValue(1); //√非常量对象可以调用普通对象方法getchar();return 0;}
【转自:美国cn2服务器 http://www.558idc.com/mg.html欢迎留下您的宝贵建议】