雜記 《C 程式語言》

2021-08-29 14:32:00 字數 1247 閱讀 4352

1. 類定義可以由於#include的使用而在不同原始檔裡重複出現,這樣並不違反唯一定義規則

2. class的const成員函式不能修改class 成員變數

3. 對於const或者非const物件都可以呼叫const成員函式,而非const成員函式則只能對非const物件呼叫 p205

4. 在類x的非const成員函式裡,this 的型別就是x*;在類x的const成員函式裡 this 的型別就是const x* p206

5. 包含const或引用成員的類不能進行預設構造,必須在建構函式的初始式中進行初始化 p218,222

6. union成員不能有建構函式和析構函式 ?? p218

7. 複製建構函式完成對未初始化的儲存區的初始化,複製賦值運算子則必須正確處理乙個結構良好的物件。賦值運算子的一般性策略:防止自賦值,刪除老元素,初始化,複製新元素。

p220

關於string

1. string迭代器不做範圍檢查。string的下標運算子 [ ] 不進行範圍檢查,而 at() 則進行範圍檢查。如果對at()超範圍訪問,將導致out_of_range 異常。p516

2. 指標和陣列的等價關係對 string 不成立,如果s 是 string,&s[0] 和 s 是不一樣的 p516

3. string 的 length() 和 size() 是等價的,但是它們不能統計c風格的以0結束的字串。 p517

4. 許多串操作以字元位置加上字元個數作為引數。如果所給的位置大於串的大小,則會丟擲 out_of_range 異常,「過大」的字元計數值則簡單地當作取出這個串「剩餘」的字元,並不會丟擲異常。 p517

5. 不能用單個字元對string 進行初始化,但是可以用單個字元對string 進行賦值。 p519

string s = 'a'; //wrong

string s2;

s2 = 'a'; //ok

6. string 的 data() 產生的是字元陣列,而 c_str() 產生的是c風格字串,即以0作為結束符。string 中可以包含0

字元。即0在 string中並不表示結束標記。?? data() 和 c_str() 產生的字串存放與緩衝區中,如果要長期使用string的字串表示,可以通過copy() 函式複製到乙個陣列中。 p520

char* c_string(const string& s)

C語言程式設計雜記

includeint main printf zdgys d zxgbs d n a,x y a return 0 把乙個三位數整數,逆序輸出 includeint main else return 0 求1 100之間的和 includeint main printf 1 2 3 100 d n ...

C語言 雜記

1 常量溢位 u16 adc temp 0 應為 u32 adc temp 0 for i 0 i 100 i adc temp 100 1.2 資料範圍溢位 將乙個數拆分為n個隨機數 for i 0 i 200 i break 可更正為 for i 0 i 200 i else 小於或等於0xff...

C語言 雜記

2n 要表示為 2 n printf d a 引號必須是雙引號,不能是單引號,否則報 error c2664 printf cannot convert parameter 1 from const int to const char conversion from integral type to...