1、 既可以在函数声明也可以在函数定义中指定默认实参,但是,在一个文件中,只能为一个形参指定默认实参一次。例如下面的程序会出现重复定义错误。
int fun(int a=3,int b=5); int fun(int a=9,int b) { return a*b; }
2、函数最终的默认参数是声明和定义的合集。下面这样也是可以的,只是不推荐。
#include<iostream> using namespace std; int fun(int a,int b=5); int fun(int a=9,int b) { return a*b; } int main(void) { cout << fun() << endl; return 0; }
3、当函数定义和调用在同一个文件时,如果函数的定义在函数调用之前,则应在函数定义中给出默认值,实际上此时的定义也是声明。如果函数的定义在函数调用之后,则在函数调用之前需要有函数声明,此时必须在函数声明中给出默认值,在函数定义时可以不给出默认值。
4、对于类中的函数,一般在声明的时候给出默认值,否则的话只有在包含定义的文件里这个默认实参才会起作用。
5、对于非类中的函数,在函数声明中定义默认参数的另外一个好处时,可以利用局部声明来随意更改默认参数的值。
#include<iostream> using namespace std; int fglobal(int a,int b,int c) { cout<<a<< b <<c<<endl; return a; } int fglobal(int a,int b=2,int c=5); // 全局的声明 int main(int argc, char* argv[]) { //fglobal(); //此时用的全局申明,无第一个参数不行 fglobal(1); int fglobal(int a=2,int b=3,int c=5); // 局部的申明,不管上述默认参数是在定义还是申明中 fglobal(); ::fglobal(3); // 此时将采用全局申明 return 0; }