const只是在编译时期保证一个常量不可以被改变 在运行时期不会保证变量不可变 可以通过地址去改变 在运行时期 变量地址和常量地址 都是一样的地址 被定义为const的常量 编译器会直接替换他 这一点和#define是一样的
ps:const char*s ="acdefg" 这句代码 中的*s是不可以被改变的 原因是"acdefg"位于内存的常量区 而不是因为限定了 const 不信的话 可以去试试这个 char* s = "abcdef";这里我们去掉了const 仍然不能修改*s 所以说const只能检测是否在编译时期有修改const常量的行为
const:
1.作用
1.常量定义
2.指针限定
const* int p;//指针指向的值不可变
const int *p;//指针指向的值不可变
int const*p;//指针指向的值不可变
int * const p;//指针指向不可变
const (int*) p;//指针指向不可变
const int* const p ;//两者皆不可变
3.函数参数限定
4.函数返回值限定
const int * fun2() //调用时const int *pValue = fun2();
//我们可以把fun2()看作成一个变量,即指针内容不可变。
int* const fun3() //调用时int * const pValue = fun2();
//我们可以把fun2()看作成一个变量,即指针本身不可变。
5.const修饰类成员变量
类成员变量不可以被改变 此变量只能列表初始化
6.const修饰成员函数
此函数仅能用const成员变量 不允许修改任何数据成员
7.const修饰对象
仅能调用const成员函数
不能在类声明中初始化const数据成员。以下用法是错误的,因为类的对象未被创建时,编译器不知道SIZE的值是什么。