函数的缺省参数

来源:互联网 发布:java邮箱验证码的实现 编辑:程序博客网 时间:2024/05/21 22:30
c++中只能定义一次缺省值,即原型说明时定义了缺省值,后面的函数定义不能有缺省值,且缺省参数都必须是从右到左定义,调用时实参对形参的初始化必须是从左向右的比如:函数声明
f(int i=5);
定义了缺省值。后面对f的函数定义时就不需要提供缺省值了:f(int i)
{
cout<<i<<endl;
}即函数定义不能写成:
f(int i=5)
{
cout<<i<<endl;
}为什么是这样呢?一方面是因为编译器在编译时遇到f的函数调用只去检查函数声明,至于函数有没有实现则是链接阶段的事,如果没有函数实现则链接出错,编译仍正确,只要函数声明与函数调用一致!另一方面是因为在函数定义时如果也允许提缺省值,那么如果函数定义的缺省值与函数声明的缺省值不一样怎么办?比如f声明时缺省值为5,定义时缺省值为6,这就会出现歧义。C++在声明函数原型时,可为一个或多个参数指定缺省参数值,以后调用此函数,若省略其中某一参数,C++自动地以缺省值作为相应参数的值。例如函数原型说明为:      int special(int x=5,float y=5.3); 当进行函数调用时,可以有以下几种形式: 1)  special(100,79.8); // x=100,y=79.8 2)  special(25); // x=25,y=5.3     3)  special(); // x=5,y=5.3 
 说明: 1.只能在声明时设置默认参数 2.缺省参数都必须是从右到左定义 如:int fun(int i,int j=5,int k);//错误,k未使用 3.缺省参数都必须是从右到左定义,调用时实参对形参的初始化必须是从左向右的//缺省参数
#include <iostream.h>void func(int x,int y=10,int z=20);void main(){   func(1,2,3);   func(1,2);   func(1);}void func(int x,int y,int z){   cout<<x<<' '<<y<<' '<<z<<endl;}
0 0