赞
踩
在c++中,可以为函数的形参设置默认值。例如,如果我们想写一个求三角形周长的函数,我们可以这样写:
int Sum(int a,int b,int c) { return a+b+c; }这个函数可以求三条边都为未知的三角形的周长。如果我们已知其中一条边,比如说其中一条边是10,不想每次都把这条边的值传递进去的话,我们就可以这样写:
int Sum(int a,int b,int c=10) { return a+b+c; }我们赋给形参c一个默认值10,这样我们在就可以在给函数传实参的时候只传a,b的值,Sum函数会检测到c的值并且相加。如果c改变了,这时我们给传递了三个参数,例如a=11,b=12,c=13,编译器就会使用我们实际传入的实参c的值13,而不是默认值10。
关于函数的默认值,有以下几点注意事项:
(1)默认值不能重复赋值。
若是给同一个函数的同一个参数赋了两个默认值,编译器计算的时候就不知道如何选取,此时程序会报错。
(2)默认值有顺序:需要自右向左依次写入。
实参的传递是从右到左依次入栈的,如果定义默认值时没有从右向左依次写入,当传入小于形参个数的实参时,编译器无法确认值应该具体赋给谁,就会报错。
(3)在零初始化的时候,在不方便直接写出默认值类型的零时,可以借用零初始化的形式。
int Sum(double a=double(),int b=int(),char c=char())
特别的,在给指针初始化的时候,由于指针的特殊性,初始化时编译器无法理解,我们可以借助类型定义来实现:
typedef char* CHAR int Sum(char*c = CHAR);
函数模板的默认值:同函数的默认值一样,函数模板的默认值也是按照从右到左的方式依次赋值,传参数时从左到右匹配
template<typename T,typename E=int> T Add(T a,E b) { return a + b; } int main() { Add<int>(10,20); return 0; }以上函数可以调用成功,这是因为在函数模板中给出了E的默认值为int,所以最终会得到T--》int,E--》int
值得注意的是,函数模板由于给定的是模板参数,所以模板的默认值应为数据类型。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。