1.值代替
用于代替c中预处理器的#define,因为预处理器没有类型检查功能,所以会产生一定的小问题。
#define BUFSIZE 100
const int bufsize=100;
这两者的作用是相同的。
2.const变量定义在头文件中 。
const变量在类中时初始化通过 1. 在构造函数中用初始化列表
2. 通过显示static 用static的方法初始化
3. const在运行过程中的值不发生变化
所以一般来讲 如果我们需要一个变量不发生改变就是用const
4const在集合中
const int a[3]={2,3,4}; //这里的const意思是 不能改变的一块存储空间,已经分配了空间
int f[a[2]]; //这样便是非法的了 程序在编译期间不知道a[2]的内容
a[2]=3; // 这也是非法的
二、const与指针
1.指向const的指针---- const int* p; 或 int const* p; (效果一样)。
通过该指针无法修改其指向的值。
2.const 指针 ------ int* const p=&d;
指针指向的地址不会发生改变,且定义是一般会赋个初值。
三、const的赋值
1.不能将一个const变量的地址赋值给一个非const指针,但是总是能够用强制类型转换来实现这样的赋值。
c中
const int e=4;
int *a=(int*) (&e);
在c++使用更加安全的const_cast机制
const int e=2;
int* a=const_cast<int*>(&e);
四、const在函数参数和返回值中
1.函数参数--用于函数按值传递,可加const修饰
但是在函数内部用const限定要优于函数参数(避免引起用户调用混淆)
2.返回const值
按值返回内部变量时------------加不加const无意义,因为他总是作为右值使用。
但按值返回自己定义的变量时--------加上const便代表不能作为左值使用。
非const指针-->const指针 YES
const指针------>非const指针 NO