函数参数规则

  • 大体上可以分为三种传递类型:传值、传指针和传引用
    • 传值:新建临时变量(形参名即是变量名),使用赋值将外部的参数值传递给临时变量
    • 传指针:指针本身是基本类型(int或int64)进行传值,而不涉及到指针指向的内存区域的复制
    • 传引用:相当于给外部的参数值设置单独的别名和访问权限,本质也是传指针,可看作是传指针的语法糖
  • 三种传递类型的优缺点
    • 传值:最直接,而且临时变量与外部变量完全无关;复制开销很大,尤其是对于对象等较大的变量时;
    • 传指针:能节省很大开销,C语言也可以使用;还是发生了传值过程,使用不方便;
    • 传引用:几乎节省全部开销,能很好与C++的左右值和重载功能相结合;不是所有场合都适合传引用;
  • 综合各优缺点,得出的使用规则:
    • 基本类型传值、传引用和传指针均可,但必须是单个变量等级的传递
    • 对象的传递,包括标准模板库生成的对象,必须传递引用,除非是下面的情况:
      • 在需要兼容性的情况下(如Windows API编程)可能不允许传递引用,此时对非基本类型的数据应首先考虑传递指针
  • 概括:传引用(常用)-> 传指针(兼容性)-> 传值(基本类型)
评论