当我们希望保持某一值不变或者较方便的改变某值时,我们可以用关键字const
一、const的引用
1.如果对象是常量,引用必须是常量
const int a = 1024;
const int& game = a; //正确
int& game = a; //错误
2.引用用的可以强制类型转换
const double a = 1.66;
const int& game = a; //输出1
3.可以用常量引用非常量,不过不能通过引用来改变非常量的值
int a = 1;
const int& game = a; //可以引用
game = 2; //无法修改
二、const与指针
1.改变指向与改变值
double rate = 1.6;
const double* p1 = &rate; //不可以通过指针改变值
double* const p2 = &rate; //不可以改变指向
const double* const p3 = &rate; //不能改变指向和值
三、顶层const
1.用顶层const表示指针(或任意对象)本身是个常量,用底层const表示指针所指的对象是一个常量。
const double a=1.66; //顶层const
double rate = 1.6;
const double* p1 = &rate; //底层const
double* const p2 = &rate; //顶层const
const double* const p3 = &rate; //先是底层const后是顶层const
四、constexper和常量表达式
1.常量表达式是指值不会改变并且在编译过程就能得到计算结果的表达式。
double rate = 1.6; //不是常量表达式
const double game = 5.5; //常量表达式
const int size = get_size(); //直到运行才知道值,故不是常量表达式
2.c++11中允许将变量声明为constexpr类型,如此声明的变量一定是个常量而且必须用常量表达式初始化
constexpr int size = size(); //当size是个constexper函数时才正确
3.constexpr把对象置为顶层const
constexpr int* a = &time; //常量指针
const int* a = &time; //指向常量