1、当一个函数名在一个特殊的域中被声明多次时,编译器按如下步骤解释第二个(以及后续的)声明:
- 如果两个函数的参数表中参数的个数或类型不同,则认为这两个函数是重载的。
- 如果两个函数的返回类型和参数表精确匹配,则第二个声明被视为第一个的重复声明。参数表的比较过程与参数名无关。
- 如果两个函数的参数表相同,但是返回类型不同,则第二个被视为第一个的重复声明,会被标记为编译错误。函数的返回类型不足以区分两个重载函数。
- 如果两个函数的参数表中,只有缺省实参不同,则第二个声明被视为第一个的重复声明。
2、判断两个函数是否重载函数,只有参数是指针或引用时,const或valatile修饰符才会起作用。
3、程序员最好抱这样的观点:并不是每个语言特性都是你要攀登的下一座山峰。使用语言的特性应该遵从应用的逻辑,而不是简单地因为它的存在就必须要使用它。
4、重载函数集合中的全部函数都应该在同一个域中声明。
5、using声明和using指示符可以使一个名字空间的成员在另一个中可见,这些机制对于重载函数的声明有一些影响。
6、链接指示符只能指定重载函数集中的一个函数。
7、重载允许同一个函数名以不同参数表出现多次,这是程序源代码层次上的词法便利。但是,大多数编译系统的底层组件要求每个函数名必须唯一,这是因为大多数链接编辑器都是按照函数名来解析外部引用的。为了处理这个问题,每个函数名及其参数表都被作为一个唯一的内部名编码(encoded)。编译系统底层组件只能看到编码后的名字。因为这种编码帮助链接阶段区分程序中的重载函数,所以我们把它称作类型安全链接(type-safe linkage)。
8、类型安全链接不适用于用链接指示符extern "C"声明的函数。这就是为什么重载函数集中只能有一个用extern "C"声明的函数。
9、函数重载解析(function overload resolution)的三个步骤:- 确定函数调用考虑的重载函数的集合(即候选函数,candidate function),确定函数调用中实参表的属性。
- 从重载函数中选择函数,该函数可以在给出实参个数和类型的情况下用调用中指定的实参进行调用。这些函数叫做可行函数(viable function)。
- 选择与调用最匹配的函数(即最佳可行函数,best viable function,或最佳匹配函数,best match function)。
10、
正在编辑……