網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
一、函數(shù)參數(shù)的默認(rèn)值
- C++ 中可以在函數(shù)聲明時(shí)為參數(shù)提供一個(gè)默認(rèn)值
- 當(dāng)函數(shù)調(diào)用時(shí)沒有提供參數(shù)的值,則使用默認(rèn)值
- 參數(shù)的默認(rèn)值必須在函數(shù)聲明中指定
下面看一段代碼:
#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;
}
下面分別是該程序在 C++ 和 C語(yǔ)言環(huán)境下的編譯結(jié)果:
在 C++ 編譯環(huán)境下程序能夠編譯通過(guò),而在 C 語(yǔ)言條件下就不行,這就說(shuō)明了函數(shù)參數(shù)的默認(rèn)值是 C++ 語(yǔ)言對(duì) C語(yǔ)言的一個(gè)擴(kuò)展。且函數(shù)參數(shù)的默認(rèn)值在定義時(shí)不會(huì)報(bào)錯(cuò),如果放在函數(shù)申明時(shí)會(huì)報(bào)錯(cuò)。
函數(shù)默認(rèn)參數(shù)的規(guī)則
- 參數(shù)的默認(rèn)值必須從右向左提供
- 函數(shù)調(diào)用時(shí)使用了默認(rèn)值,則后續(xù)參數(shù)必須使用默認(rèn)值
如下所示:
下面看一段代碼感受一下:
#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;
}
下面為輸出結(jié)果:
二、函數(shù)占位參數(shù)
在 C++ 中可以為函數(shù)提供占位參數(shù)
- 占位參數(shù)只有參數(shù)類型聲明,而沒有參數(shù)名聲明
- 一般情況下,在函|數(shù)體內(nèi)部無(wú)法使用占位參數(shù)
也就是說(shuō),下面這種表示方法在 C++ 中是沒有問題的:
函數(shù)占位參數(shù)的意義
- 占位參數(shù)與默認(rèn)參數(shù)結(jié)合起來(lái)使用
- 兼容C語(yǔ)言程序中可能出現(xiàn)的不規(guī)范寫法
就比如說(shuō),下面這兩種表示方式,在 C++ 中表示相同的意思,表示沒有參數(shù)輸入;而在C 語(yǔ)言中前者表示可輸入?yún)?shù)個(gè)數(shù)不受限制,而后者表示沒有參數(shù)輸入
下面看一段代碼:
#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語(yǔ)言兩種編譯條件下的輸出結(jié)果:
三、小結(jié)
- C++ 中支持函數(shù)參數(shù)的默認(rèn)值
- 如果函數(shù)調(diào)用時(shí)沒有提供參數(shù)值,則使用默認(rèn)值
- 參數(shù)的默認(rèn)值必須從右向左提供
- 函數(shù)調(diào)用時(shí)使用了默認(rèn)值,則后續(xù)參數(shù)必須使用默認(rèn)值
- C++ 中支持占位參數(shù),用于兼容C語(yǔ)言中的不規(guī)范寫法
原文鏈接:https://blog.csdn.net/weixin_43129713/article/details/122625173
相關(guān)推薦
- 2021-12-07 android加載系統(tǒng)相冊(cè)圖片并顯示詳解_Android
- 2023-04-07 C#?PadLeft、PadRight用法詳解_C#教程
- 2022-08-23 .net中的DI框架AutoFac簡(jiǎn)單介紹_實(shí)用技巧
- 2022-12-21 Python?eval()和exec()函數(shù)使用詳解_python
- 2022-07-10 組件內(nèi)路由守衛(wèi)beforeRouteEnter和beforeRouteLeave
- 2022-07-18 windows多客戶端與liunx-ubuntu服務(wù)端進(jìn)行通信
- 2022-03-10 Android?APP啟動(dòng)時(shí)間優(yōu)化介紹_Android
- 2022-12-01 C++中單鏈表操作的示例代碼_C 語(yǔ)言
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支