1.const对象的初始化
如果利用一个对象去初始化另外一个对象,则
它们是不是const都无关紧要。
int i = 42;
const int ci = i; //正确,非const对象被拷贝给了const对象
int j = ci; //正确,const对象拷贝给了非const对象
ci的常量特征仅仅在执行改变ci的操作时才会发挥作用。
一旦拷贝完成,新的对象就和原来的对象没有任何关系了。
2.const引用
引用的类型必须与其所引用的对象类型一致。
但是在初始化常量引用时允许用任意表达式作为初始值,只要表达式的结果能转换成引用的类型即可。
int a = 10;
const int b = 20;
const int &c = a; //正确
const int &c = b; //正确:初始化常量引用时允许用任意表达式作为初始值
int &d = c; //错误:无法从const int转换为int&
3.const指针
与const引用的使用方法一致。
《C++Primer》中的经典解读:
所谓指向常量的指针或引用,不过是指针或引用“自以为是”罢了,他们觉得自己指向了常量,所以自觉地不去改变所指对象的值。
//下面的示例代码来自:翁恺老师的网络课程《
面向对象程序设计-C++》
(1) char *const q = ""abc; //q is const
*q = 'c'; //OK
q++; //ERROR
(2) const char *p = "ABCD"; //(*p) is a const char
*p = 'b'; //ERROR! (*p) is the const
p++; //OK
示例: Person p1("Fred",200)
const Person* p = &p1;
Person const* p = &p1;
Person *const p = &p1;
const Person *const p = &p1;
const写在*的前面,对象是const;const写在*的后面,指针是const;
4、const与函数重载