一、出入参

入参是被调函数需要的参数, 出参是主调函数需要的参数。
怎么理解呢?

  • 入参,就是被调函数要使用的,没有它被调函数可能无法工作,而为了确保使用它只是来满足被调函数的工作,不影响到主调函数的变量,(可能为了复制花费使用引用或者指针)一般加上 const 关键字加以修饰。
  • 出参,就是经过被调函数的执行后,需要返回给主调函数的参数,它可以是主调函数传入的,也可以是被调函数内部生成的。值得注意的一点,参数的传出,不是以返回值的形式,而是以参数指针或者引用的方式,(引用和指针能让形参影响到实参),这样能影响到主调函数里的变量,就变相的返回了主调函数所需要的值,所以叫出参,因为有参数值的改变,所以一般不需要加上 const 关键字进行修饰。
  • 入出参,兼具了两者的功能,但是容易混淆,不推荐使用。

二、规范

假设类型为 A,如果容易复制就传value,如果可以为null就传pointer,如果不为null就传reference,如果不改变就加const,其他按规定来

  • 不可为 null 的入参(必须传入值),使用 const A / const A &
  • 可为 null 的入参(可传值可不传值),使用 const A*
  • 出参(一般可传值可不传值),使用 A*
  • 入出参(一般必须传入值),使用 A&
  • 其他的参数按照特有的规定,比如规定必须用右值引用。

传不传值,对使用指针还是引用有啥影响呢?

其实影响不大,但方便的一点是,指针可以赋 null,然后你可以很轻松的使用,但是引用,是某个对象的别名,就必须先有一个对象,这就多了一些心智负担,麻烦一点,但同时也严谨一点。

所以,对于可传值可不传值的参数,使用指针可以传空值,比较方便。对于必须传值的参数,使用引用可以避免传空值,比较严谨。