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
發揮自己的想象力吧~~