chapter 2 const限定符

2.26 下面那些句子是合法的?如果有不合法的句子,请说明为什么?

(a) const int buf;        (b) int cnt = 0;

(c) const int sz = cnt;      (d) ++cnt; ++sz;

(a) 不合法,必须初始化

(b) 合法             (c)合法

(d)不合法,sz是常量,不能改变其值

 

2.27 下面那些初始化是合法的?请说明原因。

(a) int i = -1, &r = 0;       (b) int *const p2 = &i2;

(c) const int i = -1, &r = 0;     (d) const int *const p3 = &i2;

(e) const int *p1 = &i2;     (f) const int &const r2;

(g) const int i2 = i, &r = i;

(a) 不合法,r为引用,只能绑定在对象上

(b) 合法,且p2不能通过修改p2来修改i2的值

(c) 不合法,跟a一样

(d) 合法,p3既不能改变指向的对象也不能通过修改p3来修改i2的值

(e) 合法,且p2不能通过修改p2来修改i2的值

(f) 不合法,引用不是变量;

(g) 合法

 

2.28 说明下面的这些定义是是什么意思,挑出其中不合法的。

(a) int i, *const cp;      (b)int *p1, *const p2;

(c) const int ic, &r = ic;    (d)const int *const p3;

(e) const int *p;

都不合法,const指针必须初始化,且(c)中的引用类型不对应。

 

2.29 假设已有上一个练习中定义的那些变量,则下面的哪些语句是合法的?请说明原因。

(a) i = ic;          (b) p1 = p3;

(c) p1 = ⁣          (d)p3 = ⁣

(e) p2 = p1;           (f) ic = *p3;

(a) 合法   (b) 不合法,const int *const ->int* 无法转换

(c) 不合法,const int->int无法转换  

(d) 合法

(e) p1对象可能变化

(f) ic不能被赋值

 

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

const int v2 = 0;//顶层const      int v1 = v2;

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

const int *p2 = &v2, *const p3 = &i, &r2 = v2;  //p2是底层const, p3左边是顶层const,右边是底层const

 

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

r1 = v2;  //合法,顶层拷贝都没什么影响

p1 = p2;   //不合法,常量不能转换为非常量 

p2 = p1;   //合法

p1 = p3;   //不合法,常量不能转换为非常量

p2 = p3;   //合法

终于写完两节了。。。好想出去玩儿啊,都要被闷坏了[哭]

 

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

int null = 0, *p = null;

const int *p = nullptr;

还有一条漏网之鱼。。。

转载于:https://www.cnblogs.com/bigstrawberrywakaka/p/8568174.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值