讀《C++ Primer(第三版)》的一些疑問(不斷更新)

來源:互聯網
上載者:User

【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的某個取值操作符來初始化。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.