【1】(Page94)代碼:
int staff_size=27;//錯誤:非const變數double salaries[staff_size];
但是編譯器並不報錯?這是為什嗎?
解答:
用Dev C++編譯能通過,但是用VS2008便報錯,看來編譯器很關鍵啊~~~~
【2】(Page104)
typedef char *cstring;extern const cstring cstr;
請問,cstr的類型是什嗎?
解答:cstr是指向字元的const指標。cstring是指標類型,指向char。const修飾cstring,就是修飾指標。
【3】(Page133)代碼:
//一個string的大小與它所指的字串的長度無關;string st1(“foobar”);string st2(“a mighty oak”);
sizeof(st1)、sizeof(st2)都是12(具體數值和編譯器有關)。
解答:
sizeof(str)返回的是一個string對象本身所佔的記憶體的大小,不管你的string裡面儲存了多大的文本,這個值都是固定的。要取得string對象的長度,可以用str.length()。
【4】(Page135)下列語句哪些是非法的或錯誤的?
(a)vector<string> svec(10);(b)vector<string> *pvec1=new vector<string>(10);(c)vector<string> *pvec1=new vector<string>(10);(d)vector <string> *pv1=&svec;(i)delete pv1;
b和c有什麼區別?各是對的還是錯誤的?
還有i到底是正確的還是錯誤的?
解答:
vector<string> *pvec1=new vector<string>(10)是分配一個vector容器,裡面有10個string元素,而vector<string> *pvec1=new vector<string>(10)數組,數組含有vector <string>10個元素。
i中,是合法的,編譯器無法偵測出任何錯誤。但其實是錯誤的,因為我們不能對一個“不是通過new運算式分配的指標”施以delete操作。
【5】(Page142)下列bitset對象的聲明哪些是錯誤的?
(a)bitset<64> bitvec(32);
(d)bitset<32>bv;bitset<16> bv16(bv);
解答:
(a)正確。64是size_t的一個合法值,bitvec將使用64位中的32個。
?
【6】(Page224)下列iterator的用法哪些是錯誤的?
const vector<int> ivec;vector<string> svec;list<int> ilist;
(c)vector<string>::iterator it=&svec[0];
解答:
錯誤。iterator必須藉由begin()來初始化,而不是藉由vector的某個取值操作符來初始化。