C++ 函数新增特性 【续】

默认参数: 当函数调用中省略了实参时自动使用的一个值。  极大地提高了函数的灵活性。 当参数重新给出使,给定的值会覆盖默认参数,从而不影响函数的正常使用。

由于编译器通过查看函数原型来了解函数所使用的参数数目,因此函数原型也必须将可能的默认参数告知程序。  注意:在原型/声明时指定默认参数,而在函数定义是不能指定默认参数。  eg: char * left (const char * str, int n=1);   

对于带参数列表的函数,必须从右向左添加默认值,也就是说,要为某个参数设置默认值,则必须为它右边的所有参数提供默认值:eg: int harpo (int n, int m=4, int j=5);   实参则按照从左往右的顺序依次被赋给相应的形参,不能跳过任何参数。

默认参数不是编程方面的重大突破,而只是提供了一种边界的方式。

函数重载: 默认参数让您能够使用不同数目的参数调用同一个函数,而函数重载让你能够使用多个同名的函数。

C++根据上下文来确定要使用的重载函数的版本。

函数重载的关键是函数的参数列表——也成为函数特征标(signature)。C++允许定义名称相同的函数,条件是他们的特征表不同。如果参数数目和/或类型不同,则特征标不同。 eg: void print(const char * str, int width);     void print(double d, int width);  当使用print()函数时,编译器会根据所采用的用法使用有相应特征标的原型。

当类型均不匹配时,C++将尝试使用标准类型转换将至进行匹配,但是当有多重转换方式可选时,c++认为出错。

变量类型引用和变量类型本身视为同一个特征标。   是函数特征标,而不是函数类型使得可以对函数进行重载。

重载使用的场景:仅当函数基本上执行相同的任务,但使用不同形式的数据时,才应采用函数重载。

c++如何跟踪每一个重载函数呢?   编辑器 使用 名称修饰。   对元使命进行修饰,对参数数目和类型进行编码,如何编码取决于 参数特征标 和 不同编译器的约定。

原文地址:https://www.cnblogs.com/babysunnie/p/3199223.html