學習交流可以添加
微信讀者交流①羣 (添加微信:coderAllen,備註加羣)
程序員技術QQ交流①羣:736386324
C++教程所有源碼地址:
https://github.com/lkk789/C-Learn-Source-code
1.函數參數的默認值
c++可以在函數聲明時爲參數提供一個默認值
當函數調用時沒有提供參數的值,則使用默認值
參數的默認值必須在函數聲明中指定
問題:函數定義中是否可以出現參數的默認值?
當函數聲明和定義中的參數默認值不同時會發生什麼?
7-1 默認參數值實驗
#include <stdio.h>
int mul(int x = 0);
int main(int argc, char *argv[])
{
printf("%d\n", mul()); //默認值爲0,C語言會編譯錯誤,c++對C語言的擴展
printf("%d\n", mul(-1));
printf("%d\n", mul(2));
return 0;
}
int mul(int x) //這裏不能賦值,c++是強類型語言,對參數,默認值的檢查很嚴格
{
return x * x;
}
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;
}
3.函數佔位參數
在C++中可以爲函數提供佔位參數
佔位參數只有參數類型聲明,而沒有參數名聲明
一般情況下,在函數體內部無法使用佔位參數
目的是兼容C語言的
右邊的纔是不接受參數,左邊是佔位,是可以接受的
C語言是不等價的,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 佔位參數與默認參數值
避免bug的方法
#include <stdio.h>
int func(int x, int = 0);
int main(int argc, char *argv[])
{
printf("%d\n", func(1));
printf("%d\n", func(2, 3));
return 0;
}
int func(int x, int)
{
return x;
}
小結
C++中支持函數參數的默認值
如果函數調用時沒有提供參數值,則使用默認值
參數的默認值必須從右向左提供
函數調用時使用了默認值,則後續參數必須使用默認值
C++中支持佔位參數,用於兼容C語言中的不規範寫法