2.30:对于下面的这些语句,请说明对象被声明成了顶层const还是底层const?

const int v2=0;  int v1=v2;

int *p1=&v1,&r1=v1;

const int *p2=&v2,*const p3=&i,&r2=v2;

Ans:v2是顶层const对象,p2是底层const对象,p3是顶层const也是底层const,r2是常量引用是底层const对象

2.31:假设已有上一个练习中所做的那些声明,则下面的哪些语句时合法的?请说明顶层const和底层const在每个例子中有何体现。

r1=v2;  //合法,r1是一个普通的引用,v2是一个顶层const对象,拷贝过程中不影响。。

p1=p2;  p2=p1;  //前者p2是底层const对象,而p1是普通指针,用底层const对象p2去修改普通指针p1,显然是不合法的。后者p2是底层const对象,不是顶层const对象,因而可以修改p2指针本身的值。

p1=p3;  p2=p3;  //前者不合法,p3是顶层const对象也是底层const对象,而p1是普通指针,因此不合法。后者合法,p3是一个顶层const指针也是底层const指针,而p2是一个底层const,故合法。

 2.32:下面代码是否合法?如果非法,请设法将其修改正确。

int null=0,*p=null;

Ans:非法。应修改为:int null=0,*p=&null;或者可以改成:int null =0,*p=nullptr;

 posted on 2018-07-25 13:30  linlh  阅读(145)  评论(0编辑  收藏  举报