天天看點

C++ 預設參數、函數重載、名字修飾1.預設參數2.函數重載3.Windows下名字修飾規則4.extern “C”

1.預設參數

1.1預設參數概念:

  • 預設參數是聲明或定義函數時為函數的參數指定一個預設值 ;
  • 在調用該函數時,如果沒有指定實參則采用該預設值,否則使用指定的實參。
    C++ 預設參數、函數重載、名字修飾1.預設參數2.函數重載3.Windows下名字修飾規則4.extern “C”
  • 所需代碼:
#include <iostream>
using namespace std;
void show(int a = 1, int b = 2, int c = 3)
{
	cout << "a=" << a << endl;
	cout << "b=" << b << endl;
	cout << "c=" << c << endl;
}
int main()
{
	show();
	show(10, 20);
	return 0;
}
           

1.2預設參數的分類:

  • 全預設參數:函數的每個參數都有預設值,傳遞參數的時候時,可傳任意多個參數,且參數的傳參是從左依次往右進行。
  • C++ 預設參數、函數重載、名字修飾1.預設參數2.函數重載3.Windows下名字修飾規則4.extern “C”

半預設參數:函數的部分參數有預設值,傳參時,沒有預設值的必須傳參且**預設值要從右往左依次給**。

C++ 預設參數、函數重載、名字修飾1.預設參數2.函數重載3.Windows下名字修飾規則4.extern “C”

1.3注意:

  • 因為實參是從右往左傳是以半預設參數可以省略左邊,不能省略右邊,不能間隔給
  • 預設參數不能在函數聲明和定義中同時出現
  • 預設值必須是常量或者全局變量
  • C語言不支援預設(因為C語言的編譯器不支援)

2.函數重載

2.1函數重載概念

函數重載:是函數的一種特殊情況,C++允許在同一作用域中聲明幾個功能類似的同名函數,這些同名函數的形參清單(參數個數 或 類型 或 順序)必須不同。

概括來說就是兩點:

C++ 預設參數、函數重載、名字修飾1.預設參數2.函數重載3.Windows下名字修飾規則4.extern “C”

下面的代碼就不是函數重載

C++ 預設參數、函數重載、名字修飾1.預設參數2.函數重載3.Windows下名字修飾規則4.extern “C”

-那麼為什麼上面這個兩個函數不能函數重載?為什麼C++支援函數重載,而C語言不支援函數重載?

  • C語言沒法支援重載是因為同名函數沒辦法區分,C語言在編譯後,隻對函數名前面加個_,是以沒法區分同名函數
  • C++是通過函數修飾規則來區分函數,隻要參數不同,修飾出來的名字就不一樣,就支援重載

3.Windows下名字修飾規則

C++ 預設參數、函數重載、名字修飾1.預設參數2.函數重載3.Windows下名字修飾規則4.extern “C”

4.extern “C”

  • 在函數前加extern “C”,意思是告訴編譯器将該函數按照C語言的規則來編譯
C++ 預設參數、函數重載、名字修飾1.預設參數2.函數重載3.Windows下名字修飾規則4.extern “C”

繼續閱讀