《C++ Primer》第五版课后习题解答_第二章(4)(30-38)

系统环境: windows 10 1703

编译环境:Visual studio 2017


2.30

const int v2 = 0, v2 是顶层 const;

int v1 = v2, v1 是非常量,v2 是顶层 const;

int *p1 = &v1, &r1 = v1, p1 是非常量指针,r1 是非常量引用;

const int *p2 = &v2, *const p3 = &i, &r2 = v2, *p2 是底层 const,p3 既是顶层 const 也是底层 const,r2 是底层 const。


2.31

r1 = v2, 合法,拷贝 v2 的值给和 r1 绑定的 v1,v2 是顶层 const,对此操作无影响;

p1 = p2, 非法,p2 是底层 const,p1 不是;

p2 = p1, 合法,把 p1 指向的对象赋给 p2;

p1 = p3, 非法,p3 包含底层 const 的定义,而 p1 没有;

p2 = p3, 合法,将 p3 指向的对象赋给 p2。


2.32

非法。有很多修改方法,下面列出其中两种

#include <iostream>

int main()
{   
    int null = 0, *p = &null;
    std::cout << null << " " << p << " " << *p << std::endl;
    return 0;
}
输出为 0 0000007D066FFAF0 0

#include <iostream>

int main()
{   
    int null = 0, *p = nullptr;
    std::cout << null << " " << p << " " << *p << std::endl;
    return 0;
}
输出为 0 0000000000000000 


2.33

a = 42, 将 42 赋给 a;

b = 42, 将 42 赋给 b;

c = 42, 将 42 赋给 c;

d = 42, 非法,不能将字面量赋给指针 d;

e = 42, 非法,不能将字面量赋给指针 e;

g = 42, 非法,不能改变常量 ci 的值 (g 为绑定到 ci 的常量引用)

2.34

正确


2.35

j int;k const int(整形常量引用);p 指向整型常量的指针;j2 整型常量;k2 整型常量引用


2.36

a int 4

b int 4

c int 3

d int& 绑定到a


2.37

a int 3

b int 4

c int 3

d int& 绑定到 a


2.38

decltype 处理顶层 const 和引用的方式与 auto 有些许不同。如果 decltype 使用的表达式是一个变量,则 decltype 返回该变量的类型(包括顶层 const 和引用在内)

int i = 0, &r = i;

//相同

auto c1 = i; c1 是 int

decltype(i) c2; c2 是 int

//不同

auto c3 = r; // c3 是 int

decltype(r) c4 = r // c4 是 int& 绑定到 r

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值