c++ const总结
const可以修饰变量 指针 成员函数 类
-
const变量
const全局变量
const全局变量存储在常量区 常量区是只读存储区 不能被修改 生命周期和源程序生命周期相同
const局部变量
const局部变量存储在栈区
不能显式直接修改 可以隐式修改
如
int b=3;
const int* a=&b;
cout<<*a<<endl; //3
b=4;
cout<<*a<<endl; //4 -
const指针
const指针包括两种
指向常量的指针和常量指针 //说法1
指针常量和常量指针 //说法2
说法2中的指针常量其实就是说法1中的常量指针 这是因为中文的语法有歧义所以有这两种表达方式
指向常量的指针
const int a;
常量指针
int const a;
顶层const 顶层const其实就是指针自己是个const
底层const 底层const其实就是指针指向的对象是个const
顶层const在函数传参或者赋值的时候可以忽略
底层const不会
例如
int b=1;
const int* a=&b;//底层
int *const aa=&b;//顶层
int *p1=a;//错误底层const在赋值时候必须有一致类型
int *p2=aa;//正确
底层const const int* a; *a的值是可以改变的 虽然不能直接用 a=tem来赋值 但是可以改变a的地址 来达到改变a的效果 例如
int b=1;
int c=2;
const int *a=&b;
a=&c;
-
const引用
int b=1;
const int &a=b;//合法
int &c=a;//非法
非常量可以被常量引用
常量不能被非常量引用
引用的底层原理是一个常量指针 即自身是常量的指针 这样才能实现其对象绑定的功能 不能再引用其他的变量 -
const成员函数
const成员函数 不能修改成员变量 原因是给const成员函数传递的this指针是一个指向常量的this指针 因此不能修改其成员变量
但是const成员函数可以修改其他对象的值 全局变量的值 静态变量的值 -
const类
const类只能调用const成员函数 只能访问const成员变量