C++ 預設引數和佔位符

ʚVVcatɞ發表於2020-11-02

通常情況下,函式在呼叫時,形參從實參那裡取得值。對於多次呼叫同一函式的同一 實參時,C++給出了更簡單的處理辦法。給形參以預設值,這樣就不用從實參那裡取值了。

#define  _CRT_SECURE_NO_WARNINGS 
#include <iostream>

using namespace std;


// c++中 允許給一個形參 預設設定為一個值, 當外部呼叫函式的時候,如果不傳遞引數的,那麼x就是100
//如果外部傳遞實參,那麼x的值就是實參的值

int func1(int x, int = 0)  // 這裡的 int = 0 是一個佔位符,沒有實際意義
{
	cout << "func1: x = " << x << endl;

	return 0;
}


//求一個 立方體的體積
//預設引數,必須是從右向左設定, 只有有一個引數是帶有預設引數 的,那麼他右邊的所有引數都必須有預設值。
int volume(int len, int width, int high = 30)
{
	return len * width * high;
}

int main(void)
{
	int x = 10;
	int v = 0;

	func1(x);  // 傳遞一個引數
	func1(x , v); // 傳遞兩個引數,v 傳到 func1函式中沒有意義, int = 0 是一個佔位符
	

	int len = 10;
	int w = 20;
	int h = 30;

	v = volume(len, w, h);  // 傳遞三個引數

	cout << "v = " << v << endl;
	
	v = volume(len, w); // 傳遞兩個引數

	cout << "v = " << v << endl;

	return 0;
}

錯誤函式寫法

  float volume(float length, float weight = 4,float high){  // 錯誤的函式寫法
 
  return length*weight*high;
 }

在預設引數規則,如果預設引數出現,那麼右邊的都必須有預設引數,例如當 float weight 給予預設值,float high 沒有賦值的話,執行就會報錯


int func1(int x, int = 0)
{
	cout << "func1: x = " << x << endl;

	return 0;
}

函式佔位引數
佔位引數只有引數型別宣告,⽽而沒有引數名宣告
一般情況下,在函式體內部⽆無法使⽤用佔位引數

注:可以將佔位引數與預設引數結合起來使⽤

意義

為以後程式的擴充套件留下線索
相容C語⾔言程式中可能出現的不規範寫法

總結:

預設引數規則 :
只有引數列表後面部分的引數才可以提供預設引數值
一旦在一個函式呼叫中開始使用預設引數值,那麼這個引數後的所有參 數都必須使用預設引數值

如果預設引數和佔位引數在一起,都能調⽤用起來

相關文章