有时我们希望定义一种变量,它的值不能被改变,就要用到关键字const
const int i = 1024; const int &ri = i; //正确 int &ri1 = i; //错误,试图让一个非常量引用去指向一个常量引用初始化对const的引用
int &a = 10; //错误,引用初始值必须是一个对象 double d = 3.14; int &b = d //错误,此处的初值必须是int类型 int i = 42; const int &r1 = i; //正确 const int &r2 = 42; //正确 const int &r3 = r1 * 2; //正确r3是一个引用常量 double dval = 3.14; const int &ri = dval; // 正确ri是一个引用常量对于上中情况double类型转换为int类型的常量引用,编译器是这样转换的
const int temp = dval; //由双精度浮点类型生成一个临时的整形常量 const int &ri = temp //让ri绑定这个临时变量当然const引用可以引用一个并非const的对象
const double d = 3.14; double *pd = &d; //错误const指针
int i = 3.14; int *const i1 = &i;
int i1 = 1; int *const i = &i1; //正确,顶层const,没什么影响 int *p = i; const int *i2 = &i1; //错误,底层const,有影响
const int max_files = 20; //是常量表达式 const int limit = max_files + 1; //是常量表达式 int staff_size = 27; //不是常量表达式constexpr变量
const int *p = nullptr; //p是一个指向整型常量的指针 constexpr int *q = nullptr; //q是一个指向整数的常量指针
原文:http://blog.csdn.net/xc_uttp/article/details/19752421