高質量C 程式設計 第6章 函式設計 1

2021-06-06 22:33:18 字數 1356 閱讀 2849

6.1 引數的規則

【規則6-1-1】引數的書寫要完整,如果函式沒有引數,則用void 填充

void setvalue(int width, int height); // 良好的風格

float getvalue(void); // 良好的風格

void setvalue(int, int); // 不良的風格

float getvalue(); // 不良的風格

【規則6-1-2】引數命名要有意義,順序要合理。

拷貝函式:一般地,應將目的引數放在前面,源引數放在後面。

void stringcopy(char *strdestination, char *strsource);
【規則6-1-3】如果引數是指標,且僅作輸入用,則應在型別前加const,以防止該指標在函式體內被意外修改。

//這裡保護strsource指向的字串不被改動,而不是保護strsource

void stringcopy(char *strdestination,const char *strsource);

【規則6-1-4】如果輸入引數以值傳遞的方式傳遞物件,則宜改用「const &」方式來傳遞,這樣可以省去臨時物件的構造和析構過程,從而提高效率。

6.2 返回值的規則

【建議6-2-2】如果函式的返回值是乙個物件,有些場合用「引用傳遞」替換「值傳遞」可以提高效率。而有些場合只能用「值傳遞」而不能用「引用傳遞」,否則會出錯。

對於賦值函式,應當用「引用傳遞」的方式返回string 物件。

string & string::operate=(const string &other)

string a,b,c;

a = b; // 如果用「值傳遞」,將產生一次 *this 拷貝

a = b = c; // 如果用「值傳遞」,將產生兩次 *this 拷貝

a = b; // 如果用「引用傳遞」,----

a = b = c; // 如果用「引用傳遞」,----

對於相加函式,應當用「值傳遞」的方式返回string 物件。如果改用「引用傳遞」,那麼函式返回值是乙個指向區域性物件temp 的「引用」。由於temp 在函式結束時被自動銷

毀,將導致返回的「引用」無效。

例如:c = a + b;

此時 a + b 並不返回期望值,c 什麼也得不到,流下了隱患。

string 的相加函式operate + 的實現如下:

string operate+(const string &s1, const string &s2)

高質量C 程式設計 第6章 函式設計 2

在函式 或 前後 判斷引數 或 變數的合法性 方法 使用斷言 assert 作用 用來檢查一些必須符合的條件,捕捉 不應該 發生的非法情況,如果不符合條件,則不讓程式繼續執行下去。使用時間 位置 前置條件斷言 執行之前 或 在函式的入口處,使用斷言檢查 引數 的合法性。斷言執行 表示呼叫者出錯了 後...

高質量C 程式設計 第6章 函式設計 3

在函式體的 出口處 對return語句的正確性和效率進行檢查 注意事項如下 1 return 語句不可返回指向 棧記憶體 的 指標 或者 引用 即函式的區域性變數 因為該內存在函式體結束時被自動銷毀 char func void 3 如果函式返回值是乙個物件,要考慮return 語句的效率。retu...

高質量程式設計指南 第1章

規則1 2 1 為了防止標頭檔案被重複引用,應當用ifndef define endif結構產生預處理塊。一 為什麼會出現標頭檔案被重複引用的問題 在乙個cpp檔案中,可以包含多個標頭檔案,而標頭檔案間又是可以相互引用的,這就導致乙個cpp檔案中可能間接多次包含某個標頭檔案,如果標頭檔案中 沒有防止...