您的位置:首页 > 编程语言 > C语言/C++

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

2017-08-23 12:05 218 查看
系统环境: 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: