第七章 函式

2021-07-03 14:17:33 字數 2400 閱讀 3815

1. 函式不能返回另乙個函式或者內建陣列型別,但是可以返回指向函式的指標,或指向陣列元素的指標

int *foo_bar()

2. 函式必須指定返回型別,至少也要void

3. c++是一種靜態強型別語言,每一次函式呼叫,編譯時都會檢查實參。

4.如果形參具有非引用型別,則複製實參的值,對形參的修改不會影響實參的值,非引用形參就如何實參的區域性副本;如果形參是引用型別,則它只是實參的別名,任何對形參的改動也會影響到實參。

對於指標形參,初始化的時候也是複製實參指標,所以如果將新指標值賦給形參,那麼不會改變主調函式中的實參指標,但是如果修改形參指標指向的物件的值,那麼此時也會實參指標指向的值。

void reset(int *ip)

通過執行reset函式,那麼實參指標依然是原來的值,但是指向的物件的值會變成1。

如果要保護實參指標的值不被修改,那麼需要定義const int *ip

5.可以將指向const物件的指標初始化為指向非const物件的指標,但是不可以把指向非const物件的指標初始化為指向const物件的指標。

如:

void use_ptr(const int *p)

此時可以用int*也可以用const int *的實參呼叫use_ptr函式,但是對於上面的reset函式只能傳遞int* 指標。

6.對於函式的形參是非引用型別的,那麼無論形參是否為const,都可以把const和非const實參傳遞,因為實參是以副本的形式傳遞的,那麼就不會更改到實參中的值,自然就無所謂的const和非const區分。

7.複製實參也不是很多情況下都適合,如果需求要修改實參的值,或者大型物件作為引數傳遞,那麼複製的話就需要花費很大的代價,或者沒辦法實現物件的複製,那麼此時可以將形參定義為引用或者指標型別。

8. 如果函式具有普通的非const引用形參,那麼不能傳遞const物件,因為函式可以修改傳遞進來的物件,這違背了實參的const特性。

只要函式中不會修改實參物件,那麼就應該把函式的形參定義為const型別,要不然這會影響到函式的適用範圍,因為這樣子就不能使用const物件,比如:

string::size_type find_char(string &s, char c)

此時如果使用find_char("hello world", 'o')那麼編譯是失敗。

9. 指向指標的引用  int  *&v

10. 函式不應該有vector或其他標準庫容器型別的形參,呼叫含有普通的非引用vector形參的函式會複製vector的每乙個元素,我們可以把形參宣告為引用型別,之後我們學習到通過將指向容器中需要處理的元素的迭代器來傳遞容器。

11. 陣列形參,

void printvalues(int *) {}

void printvalues(int ){}

void printvalues(int [10]){}

這三種方式都是ok的,編譯器檢查的時候會忽略陣列的長度,只是檢查型別。但是如果定義長度會引起誤解,如果實參陣列的長度少於10,那麼就會引起越界訪問
如果是通過引用傳遞陣列的,那麼編譯器不會把實參轉化為指標,而是傳遞陣列的引用本身,這時候陣列大小成為形參和實參型別的一部分,編譯器會檢查長度是否匹配
void printvalues(int (&arr)[10])//儲存10個int的陣列的引用
void printvalues(int &arr[10])//儲存10個引用的陣列

12. int main(int argc, char *argv)

13.函式的返回值千萬不能返回區域性物件的引用,也不能返回區域性物件的指標。

14.static區域性物件

15.內聯函式應該在標頭檔案中定義。因為內聯函式的定義對編譯器必須是可見的,以便編譯器在呼叫點能夠內聯展開該函式的**

16.編譯器隱式的將類內定義的成員函式當作內聯函式

17.常量成員函式,即在成員函式宣告的形參表後面存在const

bool sales_item::same_isbn(const sales_item *const this, const sales_item &rhs) const

也就是說,this其實是預設隱含形參,後面的const會修飾this  使用的話 total.same_isbn(trans),那麼此時隱含的this形參就是指向total的const sales_item* 型別的指標

const物件、指向const物件的指標或引用只能用於呼叫其const成員函式,如果嘗試用它們來呼叫非const成員函式,那麼是錯誤的。

第七章 函式

1.ansi c 允許函式原型的使用,函式宣告提供給編譯器和之後的呼叫函式返回值型別,引數型別和數量的資訊,而k c用單獨的列表給出引數的型別,編譯器只記住函式的返回值型別,但不儲存函式的引數數量和型別 2.沒有return語句的函式,隱式的返回 3.函式的原型可以單獨放於乙個標頭檔案中,一定要具有...

第七章 函式

樂趣在於發現。程式設計最大的樂趣在於編寫自己的函式 使用c 函式步驟 1.函式定義 2.函式原型 3.呼叫函式 函式分為兩類 有返回值和沒有返回值的函式。void函式表示沒有返回值 void funcitonname parameterlist include using namespace std...

第七章 函式

1.千萬不要返回區域性物件的引用 理解返回引用至關重要的是 千萬不能返回區域性變數的引用。當函式執行完畢時,將釋放分配給區域性物件的儲存空間。此時,對區域性物件 的引用就會指向不確定的記憶體。考慮下面的程式 disaster function returns a reference to a loc...