1. 程式人生 > >C++筆記 第七課 函式引數的擴充套件---狄泰學院

C++筆記 第七課 函式引數的擴充套件---狄泰學院

如果在閱讀過程中發現有錯誤,望評論指正,希望大家一起學習,一起進步。
學習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語言中的不規範寫法