删除 4.3. 引用参数

This commit is contained in:
归故里 2024-02-07 19:33:59 +08:00
parent f538b9dc4a
commit ab6a835447

View File

@ -35,46 +35,7 @@ C/C++ 中的函数参数或者是函数的输入, 或者是函数的输出, 或
在处理代码时, 你可能会发现复杂的长函数. 不要害怕修改现有代码: 如果证实这些代码使用 / 调试起来很困难, 或者你只需要使用其中的一小段代码, 考虑将其分割为更加简短并易于管理的若干函数.
4.3. 引用参数
~~~~~~~~~~~~~~~~~~~~~~
**总述**
所有按引用传递的参数必须加上 ``const``.
**定义**
在 C 语言中, 如果函数需要修改变量的值, 参数必须为指针, 如 ``int foo(int *pval)``. 在 C++ 中, 函数还可以声明为引用参数: ``int foo(int &val)``.
**优点**
定义引用参数可以防止出现 ``(*pval)++`` 这样丑陋的代码. 引用参数对于拷贝构造函数这样的应用也是必需的. 同时也更明确地不接受空指针.
**缺点**
容易引起误解, 因为引用在语法上是值变量却拥有指针的语义.
**结论**
函数参数列表中, 所有引用参数都必须是 ``const``:
.. code-block:: c++
void Foo(const string &in, string *out);
事实上这在 Google Code 是一个硬性约定: 输入参数是值参或 ``const`` 引用, 输出参数为指针. 输入参数可以是 ``const`` 指针, 但决不能是非 ``const`` 的引用参数, 除非特殊要求, 比如 ``swap()``.
有时候, 在输入形参中用 ``const T*`` 指针比 ``const T&`` 更明智. 比如:
* 可能会传递空指针.
* 函数要把指针或对地址的引用赋值给输入形参.
总而言之, 大多时候输入形参往往是 ``const T&``. 若用 ``const T*`` 则说明输入另有处理. 所以若要使用 ``const T*``, 则应给出相应的理由, 否则会使得读者感到迷惑.
.. _function-overloading:
4.4. 函数重载
4.3. 函数重载
~~~~~~~~~~~~~~~~~~~~~~
**总述**
@ -105,7 +66,7 @@ C/C++ 中的函数参数或者是函数的输入, 或者是函数的输出, 或
如果打算重载一个函数, 可以试试改在函数名里加上参数信息. 例如, 用 ``AppendString()````AppendInt()`` 等, 而不是一口气重载多个 ``Append()``. 如果重载函数的目的是为了支持不同数量的同一类型参数, 则优先考虑使用 ``std::vector`` 以便使用者可以用 :ref:`列表初始化 <braced-initializer-list>` 指定参数.
4.5. 缺省参数
4.4. 缺省参数
~~~~~~~~~~~~~~~~~~~~~~
**总述**
@ -132,7 +93,7 @@ C/C++ 中的函数参数或者是函数的输入, 或者是函数的输出, 或
在其他情况下, 如果缺省参数对可读性的提升远远超过了以上提及的缺点的话, 可以使用缺省参数. 如果仍有疑惑, 就使用函数重载.
4.6. 函数返回类型后置语法
4.5. 函数返回类型后置语法
~~~~~~~~~~~~~~~~~~~~~~~~~
**总述**