C++中函数参数的默认值
生活随笔
收集整理的這篇文章主要介紹了
C++中函数参数的默认值
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 1 C++中函數參數的默認值
- 1.1 C++中函數參數的默認值
- 1.2 函數默認參數的規則
- 2 函數占位參數
- 2.1 函數占位參數
- 2.2 函數占位參數的意義
1 C++中函數參數的默認值
1.1 C++中函數參數的默認值
對于C++中函數參數的默認值:
- 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; }/* 第一種情況:當聲明和定義的默認值不同時error: default argument given for parameter 1 of ‘void fun(int)’ error: after previous specification in ‘void fun(int)’void fun(int x = 555);*//* 第二種情況:當聲明中無默認值,而定義中有默認值 此時調用函數必須按相應參數進行傳參,否則會報錯。并且定義時的默認值并不會起作用,這是種沒有意義的做法,雖然編譯通過了。*//* 第三種情況:聲明和定義時均給出了默認值,則直接編譯錯誤。 */1.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; }/* 不正確聲明 default argument missing for parameter 2 of ‘void fun(int, int, int)’void fun(int x = 555, int y, int z = 12); */2 函數占位參數
2.1 函數占位參數
函數占位參數:
- 在C++中可以為函數提供占位參數。
- 占位參數只有參數類型聲明,而沒有參數名聲明。
- 一般情況下,在函數體內部無法使用占位參數。
2.2 函數占位參數的意義
主要意義如下:
- 占位參數與默認參數結合起來使用;
- 兼容C語言程序中可能出現的不規范寫法。
問題:下面的兩種聲明方式等價嗎?
void fun(); <-> void fun(void);
(C語言中不等價,不寫void意味著接收任意的參數,寫void意味著不接收任何參數;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; }示例代碼:占位符與默認參數結合起來使用
#include<stdio.h>void fun(int = 0, int = 0);int main(void) {fun(1,2);fun();return 0; }void fun(int, int) {}參考資料:
總結
以上是生活随笔為你收集整理的C++中函数参数的默认值的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 按钮button的常用属性和事件
- 下一篇: C和C++中的野指针问题