C++行內函數、函式過載與函式預設引數
一、行內函數
- 背景:函式呼叫是有時間開銷的。如果函式本身只有幾條語句,執行非常快,而且函式被反覆執行很多次,相比之下呼叫函式所產生的這個開銷就會顯得比較大。
- 目的:為了減少函式呼叫的開銷,引入了行內函數機制。編譯器處理對行內函數的呼叫語句時,是將整個函式的程式碼插入到呼叫語句處,而不會產生呼叫函式的語句。
- 程式碼例項:(inline代表行內函數)
inline int Max(int a,int b)
{
if( a > b) return a;
return b;
}
二、函式過載
- 定義:一個或多個函式,名字相同,然而引數個數或引數型別不相同,這叫做函式的過載。
- 以下三個函式是過載關係:
int Max(double f1,double f2) { }
int Max(int n1,int n2) { }
int Max(int n1,int n2,int n3) { }
Max(3.4,2.5); //呼叫 (1)
Max(2,4); //呼叫 (2)
Max(1,2,3); //呼叫 (3)
Max(3,2.4); //error,二義性
優點:
- 函式過載使得函式命名變得簡單。
- 編譯器根據呼叫語句的中的實參的個數和型別判斷應該呼叫哪個函式。
三、函式預設引數
- 定義: C++中,定義函式的時候可以讓最右邊的連續若干個引數有預設值,那麼呼叫函式的時候,若相應位置不寫引數,引數就是預設值。
- 目的:函式引數可預設的目的在於提高程式的可擴充性。
- 優點:即如果某個寫好的函式要新增新的引數,而原先那些呼叫該函式的語句,未必需要使用新增的引數,那麼為了避免對原先那些函式呼叫語句的修改,就可以使用預設引數。
- 程式碼例項
void func( int x1, int x2 = 2, int x3 = 3) { }
func(10 ) ; //等效於 func(10,2,3)
func(10,8) ; //等效於 func(10,8,3)
func(10, , 8) ; //不行,只能最右邊的連續若干個引數預設
函式引數的預設值也可以理解為函式引數的預設值。當你傳入引數時,引數就是你傳入的數,當你不給它引數時,引數就是預設值,也就是預設值。
注:使用函式預設引數要注意避免有函式過載的二義性
void valueX(int val = 0){
x = val;
}
int valueX(){
return x;
}
valueX();//錯誤,無法判斷呼叫的是哪個valueX
相關文章
- 3.3.2 函式的預設引數和佔位引數 函式過載函式
- 函式外與函式內的變數函式變數
- 預設建構函式、引數化建構函式、複製建構函式、解構函式函式
- 函式引數 引數定義函式型別函式型別
- TypeScript 函式可選引數和預設引數TypeScript函式
- Javascript函式引數求值——Thunk函式JavaScript函式
- 函式基礎和函式引數函式
- webgl內建函式--指數函式Web函式
- Lua中呼叫ref和out修飾引數的函式/過載函式函式
- C++函式過載C++函式
- C++ 函式過載,函式模板和函式模板過載,選擇哪一個?C++函式
- C++行內函數C++函數
- c++函式引數和返回值C++函式
- C++之函式過載C++函式
- 函式、引數、解構函式
- 函式引數詳解函式
- 函式的動態引數 及函式巢狀函式巢狀
- 第 8 節:函式-函式定義和引數函式
- 函式(三)作用域之變數作用域、函式巢狀中區域性函式作用域、預設值引數作用域函式變數巢狀
- C++ 派生類函式過載與虛擬函式繼承詳解C++函式繼承
- python---函式引數、變數Python函式變數
- 方法(函式)的定義與引數函式
- MySQL函式大全(字串函式,數學函式,日期函式,系統級函式,聚合函式)MySql函式字串
- 07:函式之函式的引數和返回值函式
- C++ 函式過載和模板C++函式
- Python函式引數總結Python函式
- JavaScript函式傳遞引數JavaScript函式
- 函式的引數傳遞函式
- 陣列作為函式引數陣列函式
- 程式中的函式引數函式
- 函式中引數傳值函式
- ES6函式引數函式
- python函式變長引數Python函式
- Python之在函式中使用列表作為預設引數Python函式
- 寫了一個分段函式,引數是單個數字,執行函式 畫圖函式
- webgl內建函式--幾何函式與矩陣函式Web函式矩陣
- webgl內建函式--向量函式與紋理查詢函式Web函式
- Lambda表示式入門--函數語言程式設計與函式式介面函數程式設計函式