C++筆記 第七課 函式引數的擴充套件---狄泰學院
阿新 • • 發佈:2018-11-06
如果在閱讀過程中發現有錯誤,望評論指正,希望大家一起學習,一起進步。
學習C++編譯環境:Linux
第七課 函式引數的擴充套件
1.函式引數的預設值
C++中可以在函式宣告時為引數提供一個預設值
當函式呼叫時沒有提供引數的值,則使用預設值
引數的預設值必須在函式宣告中指定
問題:函式定義中是否可以出現引數的預設值?
當函式宣告和定義中的引數預設值不同時會發生什麼?
7-1 預設引數值初探
#include <stdio.h> int mul(int x = 0); int main(int argc, char *argv[]) { printf("%d\n", mul()); printf("%d\n", mul(-1)); printf("%d\n", mul(2)); return 0; } int mul(int x) { return x * x; } 執行結果 0 1 4
2.函式預設引數的規則
引數的預設值必須從右向左提供(設定)
函式呼叫時使用了預設值,則後續引數必須使用預設值(呼叫,匹配從左向右)
7-2 預設引數的錯誤示例
#include <stdio.h> int add(int x, int y = 0, int z = 0); int main(int argc, char *argv[]) { printf("%d\n", add(1)); printf("%d\n", add(1, 2)); printf("%d\n", add(1, 2, 3)); return 0; } int add(int x, int y, int z) { return x + y + z; } 執行結果 1 3 6
3.函式佔位引數
在C++中可以為函式提供佔位引數
佔位引數只有引數型別宣告,而沒有引數名宣告
一般情況下,在函式體內部無法使用佔位引數
函式佔位引數的意義
佔位引數與預設引數結合起來使用
相容C語言程式中可能出現的不規範寫法
下面的兩種宣告方式等價嗎?C中不等價,C++等價
void func(); <–> void func(void);
下面兩段程式碼在移植過程中的改寫
test.c
#include <stdio.h> void func() { } int main(int argc, char *argv[]) { func(); func(1,2); return 0; }
test.cpp
#include <stdio.h>
void func(int = 0, int = 0 )
{
}
int main(int argc, char *argv[])
{
func();
func(1,2);
return 0;
}
7-3 佔位引數與預設引數值
小結
C++中支援函式引數的預設值
如果函式呼叫時沒有提供引數值,則使用預設值
引數的預設值必須從右向左提供
函式呼叫時使用了預設值,則後續引數必須使用預設值
C++中支援佔位引數,用於相容C語言中的不規範寫法