>[info] # 有默認值的參數
1. 函數調用的實參按位置解析,缺省實參只能用來替換函數調用缺少的尾部實參。
2. 定義/聲明時,默認參數應**從右向左**依次定義。
> `int fun(int a = 0,double b,char c)`
> //error
> `int fun(int a,double b,char c = '\n')`
> //ture
3. 調用函數時, 參數**從左向右**匹配。
## **例子**
~~~
#include <iostream>
using namespace std;
int fun(int a = 0,int b = 1,int c = 2,int d = 3)
{
cout<<"a="<<a<<";b="<<b<<";c="<<c<<";d="<<d<<";"<<endl;
return 0;
}
int main()
{
fun(2019);//a=2019
fun(22,33);//a=22 b=33
fun(2019,2020,2021);//a=2019 b=2020 c=2021
fun(2017,2018,2019,2020);//a=2017 b=2018 c=2019 d=2020
}
~~~
> 運行結果 a=2019;b=1;c=2;d=3; a=22;b=33;c=2;d=3; a=2019;b=2020;c=2021;d=3; a=2017;b=2018;c=2019;d=2020; Press any key to continue
1. 既有聲明又有定義時,定義中可省略默認參數;只有定義時,默認參數須出現在定義中。
2. 普通局部變量和含有普通局部變量的表達式不能作為默認實參。除此之外,只要表達式的類型能轉換成形參所需的類型,該表達式就能作為默認實參。
> 因為函數的定義和聲明在編譯之前就確定了,此時普通局部變量的位置和值還沒有確定。但是默認值的計算發生在函數調用時期。
- 介紹
- 編程設計語言
- 第一章 對C++的初步認識
- 1.2 最簡單的C++程序
- 1.3 C++對C的補充
- 1.3.1 return
- 1.3.2 輸入輸出流
- 1.3.3 putchar 和 getchar
- 1.3.4 用const定義常變量
- 1.3.5 函數原型聲明
- 1.3.6 內置函數
- 1.3.7 函數重載
- 1.3.8 函數模板
- 1.3.9 有默認值的參數
- 1.3.10 作用域
- 1.3.11 const修飾指針
- 1.3.12 引用
- 1.3.13 生命期
- 1.3.14 變量
- 1.3.15 字符串變量
- 第二章 類與對象
- 2.2 類的聲明和對象的定義
- 2.3 類的成員函數
- 第三章 關于類和對象的進一步討論
- 3.1 構造函數
- 3.1.1 對象的初始化
- 3.1.2 構造函數
- 3.2 析構函數
- 3.3調用析構函數和構造函數的順序
- 3.4 對象數組
- 3.5 對象指針
- 3.6 共享數據的保護
- 3.7 對象的建立與釋放
- 3.8 對象的賦值與復制
- 3.9 靜態成員
- 3.10 友元
- 3.11 類模板
- 第四章 運算符重載
- 數據類型轉換
- 運算符重載
- 重載流插入運算符和流提取運算符
- 第五章 繼承與派生
- 繼承與派生
- 第六章 多態性與虛函數
- 多態性
- 虛函數
- 純虛函數與抽象類