名字修饰 |
假设重载了两个函数名:
print(float); print(char);
无论这两个函数是某个类的成员函数,还是全局函数都无关紧要。如果编译器只使用函数名的域,编译器并不能产生惟一的内部标识符,这两种情况下都得用_print结尾。重载函数的思想是让我们用同名的函数,但这些函数的参数列表应该不一样。所以,为了让重载函数正确工作,编译器要用不同的参数类型来修饰不同的函数名,以供它和连接器使用。上面的两个在全局范围定义的函数,可能会产生类似于_print_float和_print_char的内部名。但不同的编译器可能会产生不同的内部名。
C++中禁止仅仅靠返回值来重载函数。在C中,总是可以调用一个函数但忽略它的返回值,即调用了函数的副作用,在这种情况下,编译器如何知道调用哪个函数呢?
默认参数 |
在使用默认参数时必须记住两条规则。第一,只有参数列表的后部参数才是可默认的,也就是说,不可以在一个默认参数后面又跟一个非默认的参数。第二,一旦在一个函数调用中开始使用默认参数,那么这个参数后面的所有参数都必须是默认的。
我们使用两个完全不相干的函数维护两个函数的代码,而不是使用默认参数把它们组合成一个函数。这样,维护起来就跟容易,尤其是当函数特别大时。