天天看點

C++Primer第五版 第二章習題答案(31~41)

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

發揮自己的想象力吧~~

繼續閱讀