網站首頁 編程語言 正文
一、函數參數的默認值
- C++ 中可以在函數聲明時為參數提供一個默認值
- 當函數調用時沒有提供參數的值,則使用默認值
- 參數的默認值必須在函數聲明中指定
下面看一段代碼:
#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語言環境下的編譯結果:
在 C++ 編譯環境下程序能夠編譯通過,而在 C 語言條件下就不行,這就說明了函數參數的默認值是 C++ 語言對 C語言的一個擴展。且函數參數的默認值在定義時不會報錯,如果放在函數申明時會報錯。
函數默認參數的規則
- 參數的默認值必須從右向左提供
- 函數調用時使用了默認值,則后續參數必須使用默認值
如下所示:
下面看一段代碼感受一下:
#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;
}
下面為輸出結果:
二、函數占位參數
在 C++ 中可以為函數提供占位參數
- 占位參數只有參數類型聲明,而沒有參數名聲明
- 一般情況下,在函|數體內部無法使用占位參數
也就是說,下面這種表示方法在 C++ 中是沒有問題的:
函數占位參數的意義
- 占位參數與默認參數結合起來使用
- 兼容C語言程序中可能出現的不規范寫法
就比如說,下面這兩種表示方式,在 C++ 中表示相同的意思,表示沒有參數輸入;而在C 語言中前者表示可輸入參數個數不受限制,而后者表示沒有參數輸入
下面看一段代碼:
#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++ 中支持函數參數的默認值
- 如果函數調用時沒有提供參數值,則使用默認值
- 參數的默認值必須從右向左提供
- 函數調用時使用了默認值,則后續參數必須使用默認值
- C++ 中支持占位參數,用于兼容C語言中的不規范寫法
原文鏈接:https://blog.csdn.net/weixin_43129713/article/details/122625173
相關推薦
- 2022-08-11 Go語言Grpc?Stream的實現_Golang
- 2022-04-28 Python可視化學習之matplotlib內置單顏色_python
- 2022-07-07 Python編寫運維進程文件目錄操作實用腳本示例_python
- 2023-03-16 Android?OpenCV基礎API清晰度亮度識別檢測_Android
- 2022-08-23 Shell?腳本自動輸入密碼的三種方式小結_linux shell
- 2022-06-29 Tomcat配置訪問日志和線程數的實現步驟_Tomcat
- 2022-04-30 DataGridView自定義單元格表示值、Error圖標顯示的方法介紹_C#教程
- 2022-06-02 深入解析Apache?Hudi內核文件標記機制_服務器其它
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支