5 函数

5.1 参数顺序

规则:函数的参数顺序为:输入类型参数,输出类型参数。

C/C++中的函数参数或者是函数的输入,或者是函数的输出,或兼而有之。输入参数通常是值参或 const 引用,输出参数或输入/输出参数则一般为非 const 指针。在排列参数顺序时,将所有的输入参数置于输出参数之前。特别要注意,在加入新参数时不要因为它们是新参数就置于参数列表最后,而要按照前述的规则,即将新的输入参数也置于输出参数之前。

这并非一个硬性规定。输入/输出参数 (通常是类或结构体) 让这个问题变得复杂。并且,有时候为了其他函数保持一致,可能不得不有所变通。

5.2 编写简短函数

规则:函数尽可能简短、功能单一。

规则:长函数有时是合理的,因此不硬性限制函数的长度。如果函数超过 40 行,可以考虑在不影响程序结构的前提下对其进行分割。

对于运行良好的长函数,一旦对其修改,有可能出现新问题,甚至导致难以发现的bug。所以尽量使函数简短,以便于他人阅读和修改代码。

在处理代码时,可能会发现复杂的长函数。不要害怕修改现有代码: 如果证实这些代码使用/调试起来很困难,或者只需要使用其中的一小段代码,考虑将其分割为更加简短并易于管理的若干函数。

5.3 引用参数

规则:所有按引用方式传递的参数必须加上 const。

定义:

在 C 语言中,如果函数需要修改变量的值,参数必须为指针,如 int foo(int*pval)。在 C++中,函数还可以声明引用类型的参数: int foo(int &val)。

优点:

定义引用参数可以防止出现(*pval)++这样丑陋的代码。引用参数对于拷贝构造函数之类的应用是必需的。同时也更明确地不接受空指针。

缺点:

容易引起误解,因为引用在语法上是值变量却拥有指针的语义。

结论:

函数参数列表中,所有引用参数都必须是 const:

void Foo(const string &in,string *out);

有时候,在输入形参中用 const T* 指针比 const T& 更明智。比如:

  • 需要传递空指针的场景。
  • 函数把指针或对地址的引用赋值给输入形参。

总而言之,大多时候输入形参往往是 const T&。若用 const T*则说明输入另有处理。所以若要使用 const T*,则应给出相应的理由,否则会让使用者感到迷惑。

results matching ""

    No results matching ""