C++詳細(xì)分析講解函數(shù)參數(shù)的擴(kuò)展
一、函數(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語言環(huán)境下的編譯結(jié)果:
在 C++ 編譯環(huán)境下程序能夠編譯通過,而在 C 語言條件下就不行,這就說明了函數(shù)參數(shù)的默認(rèn)值是 C++ 語言對 C語言的一個(gè)擴(kuò)展。且函數(shù)參數(shù)的默認(rèn)值在定義時(shí)不會報(bào)錯(cuò),如果放在函數(shù)申明時(shí)會報(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)部無法使用占位參數(shù)
也就是說,下面這種表示方法在 C++ 中是沒有問題的:
函數(shù)占位參數(shù)的意義
- 占位參數(shù)與默認(rèn)參數(shù)結(jié)合起來使用
- 兼容C語言程序中可能出現(xiàn)的不規(guī)范寫法
就比如說,下面這兩種表示方式,在 C++ 中表示相同的意思,表示沒有參數(shù)輸入;而在C 語言中前者表示可輸入?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語言兩種編譯條件下的輸出結(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語言中的不規(guī)范寫法
到此這篇關(guān)于C++詳細(xì)分析講解函數(shù)參數(shù)的擴(kuò)展的文章就介紹到這了,更多相關(guān)C++參數(shù)的擴(kuò)展內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語言編程數(shù)據(jù)結(jié)構(gòu)帶頭雙向循環(huán)鏈表全面詳解
這篇文章主要為大家介紹了C語言編程的數(shù)據(jù)結(jié)構(gòu)中帶頭雙向循環(huán)鏈表全面詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助祝大家多多進(jìn)步,早日升職加薪2021-10-10C++ map與set封裝實(shí)現(xiàn)過程講解
set set是一種關(guān)聯(lián)式容器,下面這篇文章主要給大家介紹了關(guān)于C++中map和set使用的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用C++具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2023-03-03OpenSSL使用AES實(shí)現(xiàn)文件加解密功能
AES是一種對稱加密算法,它是目前廣泛使用的加密算法之一,意味著加密和解密使用相同的密鑰,這就要求密鑰的安全性非常重要,因?yàn)槿魏螕碛忻荑€的人都能進(jìn)行加密和解密操作,本文給大家介紹了OpenSSL如何使用AES實(shí)現(xiàn)文件加解密功能,需要的朋友可以參考下2023-11-11