1、C++函数声明时在后面加const的作用:非静态成员函数后面加const(加到非成员函数或静态成员后面会产生编译错误),表示成员函数隐含传入的this指针为 const指针,决定了在该成员函数中,任意修改它所在的的成员的操作都是不允许的(因为隐含了对this指针的const引用修饰);唯一的例外是对于 mutable修饰的成员。加了const的成员函数可以被非const对象和const对象调用,但不加const的成员函数只能被非const对象调用。
2、Cons修饰普通变量
一般有两种写法:const int value;//即Value的值不能被改变
int const value;//即value的值不能被改变
上述的两种写法效果都是一样的。
3、Const修饰指针类型变量
A.const char* pContent;//也可写成const (char)* pContent;
B.char* const pContent;//也可写成(char*)const pContent;
C.char const* pContent;//也可写成(char)Const *pContent;
D.const char* const pContent;
对上述的总结可以将A与C分为一类描述的结果都是const修饰*pContent做指向的内容不能被改变,对于B来说也可以写成const (Char*) pContent;其含义是指const所修饰的是pConten是一个指针变量就是一个常量,本身不容被改变。D表示指针变量和指针变量所指向的内容都不能被改变。
4、const修饰函数参数
例如:void function(const int Var);//表示const修饰的Var的值不能被改变
常常const修饰参数也用引用来提升执行效率如下所示:
例如:void Funcation(const int& Var);
5、const修饰函数的返回值
例如:const int funcation();
其含义是const所修饰的返回值必须是常量含义基本上与const修饰普通变量或者指针基本相同。
6.const修饰类对象、对象指针、对象引用
const修饰类对象表示该对象为常量对象,其中的任何成员都不能被修改。对于对象指针和对象引用也是一样。
const修饰的对象,该对象的任何非const成员函数都不能被调用,因为任何非const成员函数会有修改成员变量的企图。
7、const与define的区别
1、编译器处理方式不同
A.define宏是在预处理阶段展开。
B.const常量是编译运行阶段使用。
(2) 类型和安全检查不同
A.define宏没有类型,不做任何类型检查,仅仅是展开。
B.const常量有具体的类型,在编译阶段会执行类型检查。
(3) 存储方式不同
A.define宏仅仅是展开,有多少地方使用,就展开多少次,不会分配内存。
B.const常量会在内存中分配(可以是堆中也可以是栈中)。