编译器再编译过程中把const修饰的变量全都替换为值,而与此矛盾的是全局变量只能定义一次,其他地方只是声明,无法获取初值,为此设定了const对象只在文件内有效,然后所有用到它的文件全都重新赋值
共享const对象的方法:
1. 将const常量放在公共头文件中,直接包含头文件,相当于每个都有自己独立的定义
2. 将const对象的定义和声明处全都添加const修饰,即相当于强行添加const属性
一、const的引用
正常情况,引用的类型必须与其引用对象的类型保持一致,但初始化常量引用有两个例外
1. const int &a=42; int a=2;const int&b=a*2;
2. double a=1.234;const int &b=a;
为啥? 因为在编译过程中,编译器会为a传建一个临时量对象
二、const和指针
指向常量的指针,即自以为指的是常量,自觉地不去改变它的值 int a=1;const int *b=&a;
记忆法:指针的类型即为指向对象的类型,如果对象类型是const int,则指针类型也得是const int
常量指针:指针本身是常量,即不允许修改指向的地址 int a=1;int *const b=&a;
三、常量表达式
字面值是常量表达式,有常量表达式初始化的cosnt对象也是常量表达式
const 和cosntexpr区别,后者必须保证在编译期就可以计算得出,前者则运行的时候即可
constexpr修饰指针时只表示该指针为常量指针,不代表指向常量,需要指向常量则定义为constexpr const int *b=&a;