zoukankan      html  css  js  c++  java
  • c++之带默认形参值的函数

    先来个例子:

     1 #include <iostream>
     2 
     3 using namespace std;
     4 
     5 int sub(int x=8,int y=3){
     6     return x+y;
     7 }
     8 
     9 int main(){
    10     //freopen("D:\input.in","r",stdin);
    11     //freopen("D:\output.out","w",stdout);
    12     cout<<sub(20,15)<<endl;//35
    13     cout<<sub(10)<<endl;//13
    14     cout<<sub()<<endl;//11
    15     return 0;
    16 }

    需要注意的地方:

    1.若函数具有多个形参,则默认形参值必须自右向左连续地定义,并且在一个默认形参值的右边不能有未指定默认值的参数。这是由于c++语言在函数调用时参数是自右向左入栈这一约定决定的。

    eg:int f(int a, float b=5.0, char c='c');

    2.在调用一个函数时,如果省去了某个实参,则直到最右端的所有实参都得省去(当然,与其对应的形参要有默认值)。

    eg:int f(int a, float b=5.0, char c='c', int d=10);         f(9,4.5) <=> f(9,4.5,'c',10).

    3.默认形参值的说明必须出现在函数调用之前。而且,如果存在函数原型,则形参的默认值应在函数原型中指定;否则在函数定义中指定。另外,若函数原型中已给出了形参的默认值,则在函数定义中不得重复指定,即使所指定的默认值完全相同也不行

    eg:

     1 #include <iostream>
     2 
     3 using namespace std;
     4 
     5 int sub(int x=8,int y=3);
     6 
     7 int main(){
     8     //freopen("D:\input.in","r",stdin);
     9     //freopen("D:\output.out","w",stdout);
    10     cout<<sub(20,15)<<endl;//35
    11     cout<<sub(10)<<endl;//13
    12     cout<<sub()<<endl;//11
    13     return 0;
    14 }
    15 int sub(int x,int y){
    16     return x+y;
    17 }

    4.在同一个作用域,一旦定义了默认形参值,就不能再定义它。

    5.如果几个函数说明出现在不同的作用域内,则允许分别为它们提供不同的默认形参值。

    eg:

     1 #include <iostream>
     2 
     3 using namespace std;
     4 
     5 int sub(int x=8,int y=3);
     6 
     7 int main(){
     8     //freopen("D:\input.in","r",stdin);
     9     //freopen("D:\output.out","w",stdout);
    10     int sub(int x=0,int y=0);
    11     cout<<sub()<<endl;
    12     return 0;
    13 }

    6.对形参默认值的指定可以是初始化表达式,甚至可以包含函数调用。

    eg:int f(int a, float b=5.0, char c='c', int d=sub(20,15));

    7. 在函数原型给出了形参的默认值时,形参名可以省略。

    eg:int f(int, float=5.0, char='c', int=sub(20,15));

  • 相关阅读:
    分页精度
    abp zero core 启动vue项目
    swagger 配置错误
    .net core 3.0配置跨域
    .net core 3.0 swagger
    .net core 3.0一个记录request和respose的中间件
    .net Core3.0 +Nlog+Sqlserver
    .net core 3.0+unit of work (一)
    .NetCore 3.0迁移遇到的各种问题
    open xml 导出excel遇到的问题
  • 原文地址:https://www.cnblogs.com/jiu0821/p/4750316.html
Copyright © 2011-2022 走看看