const int bufSize = 512;
bufSize = 1024; /* 错误 */
extern const int bufSize = fcn();
int i = 12;
int &r1 = i; /* 普通引用 */
const int &r2 = i; /* const引用 */
r1 = 20; /* OK */
r2 = 20; /* Error */
const int i = 10;
int &r = i; /* 错误, 这可能导致通过引用r修改对象i, 但是i是const对象 */
int i = 10;
int k = 20;
int *p1 = &i; /* 普通指针 */
*p1 = 10; /* OK */
int *const p2 = &i; /* const指针,它指向一个int对象 */
*p2 = 20; /* OK */
p2 = &k; /* 错误, p2是const, 它本身不能被修改 */
const int j = 10;
const int *p3 = &j; /*普通指针, 指向一个const对象 */
*p3 = 30; /* 错误,指向的是const对象 */
const int *const p4 = &j; /* const指针,指向一个const对象 */
*p4 = 40; /* 错误,有两个层次 */
参考StackOverflow: What is the difference between const int*、const int * const and int const *
两条原则
int a = 5, b = 10, c = 15;
const int* foo; // foo是一个指针,指向的类型为const int
foo = &a;
//*foo = 6; // 这是条错误语句,因为foo指向的类型为const int,所以不能修改它所指向的数据
foo = &b // foo是指针,但不是const指针,因此它本身是可以被修改的
原文:https://www.cnblogs.com/TaipKang/p/15178655.html