本文目的:熟悉const的用法!
参考资源:
原文地址:http://blog.csdn.net/jonsenelizee/article/details/5151760
以下均为转载,仅供自己学习收藏之用!
一, const修饰普通变量
const修饰变量,一般有两种写法:
const TYPE value; TYPE const value;这两种写法在本质上是一样的。它的含义是: const修饰的类型为TYPE的变量value是不可变的(实际上我们可以通过其他方式更改)。
const int nValue; //nValue是不变的 int const nValue; // nValue是不变的
二,const修饰指针
但是对于指针类型的TYPE,不同的写法会有不同情况,例如:A. const char *pContent; //pContent的内容为常量不可变,<span style="color: rgb(51, 204, 0); ">(const均在*的左边)</span> B. char * const pContent; //pContent指针本身为常量不可变,(const在其右边) C. char const *pContent; //pContent的内容为常量不可变 D. const char* const pContent;//均不可变对于前三种写法,我们可以换个方式,给其加上括号
A. const (char) *pContent; B. (char*) const pContent; C. (char) const *pContent;这样就一目了然。 根据对于const修饰非指针变量的规则,很明显,A=C.
(char*) const pContent; const (char*) pContent;(2) 指针所指向的内容是常量不可变
const (char) *pContent; (char) const *pContent;(3) 两者都不可变
const char* const pContent;还有其中区别方法:
三,const修饰函数参数,
const修饰函数参数是它最广泛的一种用途, 它表示函数体中不能修改参数的值(包括参数本身的值或者参数其中包含的值)。它可以很好void function(const int Var); //传递过来的参数在函数内不可以改变(无意义,因为Var本身就是形参) void function(const char* Var); //参数指针所指内容为常量不可变 void function(char* const Var); //参数指针本身为常量不可变(也无意义, 因为char* Var也是形参)参数为引用,为了增加效率同时防止修改。
void function(const Class& Var);//引用参数在函数内不可以改变 void function(const TYPE& Var); //引用参数在函数内为常量不可变
四,const 修饰函数返回值
const修饰函数返回值其实用的并不是很多, 它的含义和const修饰普通变量以及指针的含义基本相同。我们可以把fun2()看作成一个变量,那么就是我们上面所说的1.(2)的写法,即指针本身不可变。
例如:
class AAA { void func1(); void func2() const; } const AAA Ob; Ob.func1(); //错误 Ob.func2();// 正确 const AAA* Ob = new AAA(); Ob->func1(); //错误 Ob->func2(); //正确
class A { … const int nValue; //成员常量不能被修改 … A(int x): nValue(x) {}; //只能在初始化列表中赋值 }
七,const修饰成员函数
const修饰类的成员函数, 则该成员函数不能修改类中任何非const成员函数。一般写在函数的最后来修饰。class A { … void function()const; //常成员函数, 它不改变对象的成员变量. 也不能调用类中任何非const成员函数。 }对于const类对象/指针/引用,只能调用类的const成员函数,因此,const修饰成员函数的最重要作用就是限制对于const对象的使用。
//头文件xxx.h class XXX { void doit() const; void doit(); };
//实现文件xxx.cpp #include "xxx.h" void XXX::doit() const { int i = 0; } void XXX::doit() { int i = 0; }
八, const常量与define宏定义的区别
(1) 编译器处理方式不同,