• 6 函数参数的扩展


    1 函数参数的默认值

    • C++ 中可以在函数声明时为参数提供一个默认值

    • 当函数调用时没有提供参数的值,则使用默认值

      int mul(int x = 0);
      
      int main(int argc,char* argv[])
      {
          printf("%d
      ",mul());  // <=> mul(0)
          
          return 0;
      }
      
      int mul(int x)
      {
          return x * x;
      }
      
    • 参数的默认值必须在函数声明中指定

    • 问题:函数定义中是否可以出现参数的默认值?当函数声明和定义中的参数默认值不同时会发生什么?

      • 不可以,会报错
      int mu(int x = 0);
      
      //...
      
      int mul(int x = 5)
      {
          return x * x;
      }
      
      int x = mul();
      
    • 示例

      • Demo

        #include <stdio.h>
        
        int mul(int x = 0);
        
        int main(int argc, char *argv[])
        {
            printf("%d
        ", mul());  //0
            printf("%d
        ", mul(-1));  //1
            printf("%d
        ", mul(2));  //4
            
            return 0;
        }
        
        int mul(int x)
        {
            return x * x;
        }
        

    2 函数默认参数的规则

    • 参数的默认值必须从右向左提供

    • 函数调用时使用了默认值,则后续参数必须使用默认值

      int add(int x,int y = 1,int z = 2)
      {
          return x + y + z;
      }
      
      add(0);  //x=0,y=1,z=2
      add(2,3);  //x=2,y=3,z=2
      add(3,2,1);  //x=3,y=2,z=1
      

    3 函数占位参数

    • 在 C++ 中可以为函数提供占位参数

      • 占位参数只有参数类型声明,而没有参数名声明
      • 一般情况下,在函数体内部无法使用占位参数
      int func(int x,int)
      {
          return x;
      }
      
      //...
      
      func(1,2);  //ok
      
    • 函数占位参数的意义

      • 占位参数与默认参数结合起来使用
      • 兼容 C 语言程序中可能出现的不规范写法
    • 问题:下面的两种声明方式等价么?

      void func();
      void func(void);
      
      • C 语言:前者表示可接受任意参数,后者表示不接受参数,二者不等价
      • C++:前者表示不接受参数,后者表示不接受参数,二者等价
    • 示例:占位参数与默认参数值 => 解决上述的兼容问题

      • Demo:test

        #include <stdio.h>
        
        int func(int x, int = 0);
        
        int main(int argc, char *argv[])
        {
            printf("%d
        ", func(1));
            printf("%d
        ", func(2, 3));
            
            return 0;
        }
        
        int func(int x, int)
        {
            return x;
        }
        
  • 相关阅读:
    nginx+upsync+consul 构建动态nginx配置系统
    服务容错保护断路器Hystrix之六:缓存功能的使用
    consul之:ACL配置使用
    Consul之:服务健康监测
    Consul实践指导-DNS接口
    Spring 整合Mybatis实例
    ORACLE SEQUENCE 具体解释
    python高速排序
    降阶法计算行列式方法有个地方有Bug(原文也已更正,此为更正后部分)
    MyBatis在Oracle中插入数据并返回主键的问题解决
  • 原文地址:https://www.cnblogs.com/bky-hbq/p/13708819.html
Copyright © 2020-2023  润新知