当前位置:   article > 正文

函数的默认值以及函数模板的默认值_函数模板默认值

函数模板默认值

在c++中,可以为函数的形参设置默认值。例如,如果我们想写一个求三角形周长的函数,我们可以这样写:

  1. int Sum(int a,int b,int c)
  2. {
  3. return a+b+c;
  4. }

这个函数可以求三条边都为未知的三角形的周长。如果我们已知其中一条边,比如说其中一条边是10,不想每次都把这条边的值传递进去的话,我们就可以这样写:

  1. int Sum(int a,int b,int c=10)
  2. {
  3. return a+b+c;
  4. }

我们赋给形参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())

特别的,在给指针初始化的时候,由于指针的特殊性,初始化时编译器无法理解,我们可以借助类型定义来实现:

  1. typedef char* CHAR
  2. int Sum(char*c = CHAR);

函数模板的默认值:同函数的默认值一样,函数模板的默认值也是按照从右到左的方式依次赋值,传参数时从左到右匹配

  1. template<typename T,typename E=int>
  2. T Add(T a,E b)
  3. {
  4. return a + b;
  5. }
  6. int main()
  7. {
  8. Add<int>(10,20);
  9. return 0;
  10. }

以上函数可以调用成功,这是因为在函数模板中给出了E的默认值为int,所以最终会得到T--》int,E--》int

值得注意的是,函数模板由于给定的是模板参数,所以模板的默认值应为数据类型。

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/335106?site
推荐阅读
相关标签
  

闽ICP备14008679号