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

C++Primer第五版 第二章习题答案(31~41)

2016-11-20 09:46 281 查看
2.31

知识点:顶层const的拷贝不受限制,但是底层const的拷贝的对象必须具有相同的底层const资格。一般来说:非常量可以赋值给常量,反之则不行

答案:

a:合法;

b:不合法,p1是非常量,p2是常量,不能进行赋值操作;

c:合法;

d:不合法,p3既是底层也是顶层const,所以都得考虑到;

e:合法;

2.32

指向空的指针可以用nullptr或0带代替

所以该式可表达为:*p = nullptr;

2.33

知识点一:使用类型别名:C++中可以定义一个类型的别名,有两种方式

1:使用typedef

typedef double wages;  //wages就成为了double的别名
typedef wages base ,*p;  //base 成了double的别名(同义词),p成了double *的同义词(double类型的指针)


2:使用别名名称

using  SI = Sales_item; //  SI 成为了Sales_item的别名


知识点二:auto 类型说明符:当我们不知道变量表达式的类型时,可以使用auto让编译器为我们决定表达式的类型

auto a = b+c; //编译器会为我们判别类型
auto a = 0, b = 3.14;  //错误,auto语句中的类型必须一致。


知识点三:auto会自动忽略掉顶层const,而底层const会被保留。

知识点四:auto定义的变量必须有初始值。

答案:

a = 42;

b = 42;

c = 42;

e:error;

f:error;

g:error;

2.34

自行理解上一题的各个知识点。

2.35

第一个auto  j  类型为int

第二个auto  &k 类型为const int &

第三个auto *p类型为const int *

第四个auto j2类型为const int

第五个auto &k2 类型为const int&

2.36

知识点:decltype:希望从表达式的类型推断出想要定义的变量的类型,该操作返回操作数的类型。

decltype(f)  sum = s; //sum的类型就是f的返回类型


decltype(())双层括号表示引用(注意引用必须初始化)
a是int类型   4

b是int类型   4

c是int类型   4

d是int &类型    4

全是4!!!!!!!!!!!

2.37

知识点:赋值的表达式语句本身是一种引用:

a int 3;

b int 4;

c int 3;

d int & 3;

2.38

主要的区别有两点:

1:如果使用引用类型,auto会识别为其所指对象的类型,decltype则会识别为引用的类型。

2:decltype(())双括号的差别。

int i = 0, &r = i;
// same
auto a = i;
decltype(i) b = i;
// different
auto c = r;
decltype(r) d = i;

2.39

很简单,报错呗~

[Error] expected ';' after struct definition


2.40

随便写,可以定义书的类型,价格,数量.........

2.41 2.42

发挥自己的想象力吧~~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息