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

来源:互联网 发布:linux help和man 编辑:程序博客网 时间:2024/06/01 07:32

系统环境: 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

阅读全文
0 0