关于三者的应用可以用一下几句话来总结:
一、对变量的更改权限只会变低
二、符号离谁近就修饰谁
三、const不是对象
首先看第一句,对变量的更改权限只会更低;
举例说明:
int x = 0;//对该变量可读可写;正确
const int &y=x;对该变量可读不可写;正确
int const a = 0;//对该变量可读不可写;正确
const int &b=a;//对该变量可读不可写;正确
int &c=a;//对该变量可读可写;错误;原因是 定义的c引用表示可以更改他所‘指’的变量的值,这意味他有可读可写的权限,但是a是常量,可读不可写。然而这句代码提高了a的权限为可读可写。
同样指针也是一样。
第二句,符号离谁近就修饰谁:
仍然举例:
const int x=0;此处可写成 int const x=0; 忽略int ,const 修饰 x,也就是说x为常量,里面放int类型
const int &y=x;此处可写 int const &y=x;忽略int ,const 修饰&y,也就是说引用y‘指’向的‘对象’为常量
int &const f=x;错误,引用不是对象不能把引用本身用const修饰,但是,引用本身定义之后就不能修改;
int const *p=&x;或者const int *p=&x;const 修饰*p,*修饰p,也就是说p是指针。const修饰*p,就是p指向的‘对象’为常量
int *const g=&x;*修饰const g,cosnt修饰g,也就是说g为常量,*修饰const g,就是说该常量为指针,他会一直指向一个对象,不能指向别的对象
const int *const gg=&x;表示他会一直指向常量x,不能指向其他对象,同时不能通过gg修改x;
关于引用和指针:
引用时别名,而指针放的是地址。关于引用、指针用作形参,则不在这里说了。
第三句,const不是对象