练习2.30、2.31

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对象,拷贝过程中不影响。(但是我总觉得有问题,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,故合法。

针对上面有疑问的,这是我的测试代码:

1 编译环境:Linux
2 语言:C++

错误信息:

猜你喜欢

转载自www.cnblogs.com/Dark-King/p/9365466.html