最近在學C++,在看C++ Prime(第三版)的過程中把一些零星的知識點記了下來,主要是一些細節問題,便於以後回過頭來查閱和鞏固。
1.函數
1.1函數參數傳遞:
C++的函數參數傳遞是值傳遞的,但是按值傳遞在一些情況下不是很適合
1.當大型類對象必須作為參數傳遞時,指派至需要拷貝,需要很大的開銷
2.當實參必須要被修改時
此時需要用指標或引用作為參數傳遞給函數
指標 |
引用 |
1.指標作為函數參數時,指標可以指向一系列不同的對象,也可以什麼都不指向。 2.函數在沒有確定指標是否指向一個有效對象之前不能安全的解引用 |
1.引用作為函數參數時,引用必須被初始化為指向一個對象,一旦初始化,就不能再指向其它的對象。 2.對於引用作為函數參數時,不必考慮它是否指向一個對象,因為引用必須指向一個對象 3.引用可以在函數的重載中使用法更加直觀 |
1.1.1指標和引用參數的區別
1.1.2數組參數
1.數組在傳遞時是傳遞指標的,為了避免實參被修改,可以再聲明形參時聲明為const類型
2.在傳遞數組參數時由於傳遞的是第一個元素的地址,沒有包含傳遞的數組的長度,函數不會檢查數組的長度
3.為了是傳遞的數組可以進行數組長度的檢查,可以將參數聲明為數組的引用。當參數為數組的引用時,實際上參數包含了數組的長度,
4.編譯器會檢查數組參數的長度
1.1.3抽象容器型別參數
1.對於抽象容器類型的參數,如果是值傳遞,需要對容器中的所有元素進行拷貝,效率太低。
2.可以考慮用指標或引用作為參數,如果不希望實參被修改,可以聲明為const類型
1.1.4預設實參
1.在函式宣告的時候可以聲明預設的實參,如果有參數傳遞,則會覆蓋對應位置的預設參數
2.函數調用的實參按位置解析,預設實參只能用來替換函數調用缺少的尾部實參,所以在左邊
3.參數的任何預設參數被提供之前,最右邊未初始化參數必須被提供預設參數。即預設實參是從右往左進行指定的
4.一個參數只能在一個檔案中被指定一次預設實參,所以一般預設實參在函式宣告中被指定
1.1.5省略符號
有時候我們無法列出傳遞給函數的所有實參的數目和類型,這是我們可以用省略符號代替函數參數表
1.2 inline函數
1.內嵌函式的展開由編譯器決定,對於遞迴函式,只在第一次調用的時候展開。
2.內嵌函式一般用在頻繁調用的函數,並且函數規模不大的情況下。
3.內嵌函式如果出現在多個檔案中,需要在每個檔案進行定義,可以在標頭檔中定義,然後在需要的時候include進去
1.3指向函數的指標
1.函數名=&函數名
2.指向函數的指標可以在不解引用的情況下使用
3.指向函數的指標不支援類型轉換