1.类型安全性
第一个文件中,函数定义是:
//Function definition
void f(int){
}
第二个文件中,函数在错误的声明后调用:
//Function misdeclaration
void f(int);
int main(){
f(1); //Causes a linker error
}
在C中,第二个文件可以编译成功,连接也能成功,但在C++中却不行。因为编译器会修饰这些名字,把它变成了诸如f_int之类的名字,而使用的函数是f_char。当连接器试图找到f_char引用时,它只能找到f_int,所以它会报告一条出错信息。这就是类型安全连接。
2. 默认参数
-
默认参数是在函数声明时,就给定一个值,如果在调用函数时没有指定这一参数的值,编译器就会自动地插上这个值。
Stash(int size, int initQuantity = 0);
-
使用默认参数,必须记住:不可以在一个默认参数后面跟一个非默认的参数。
-
为阅读方便,可以在函数定义处放上一些默认的注释值。如:
void fn(int x /* = 0*/)
3.占位符参数
- 函数声明时,参数可以没有标识符
void f(int x, int = 0, float = 1.1);
- 函数定义时,参数也可以没有标识符
void f(int x, int, float flt){ /.../ }
这种无标识符的称为占位符。这种语法的目的在于**以后可以修改函数定义而不需要修改所有的函数调用。**更重要的是,如果开始使用了一个函数参数,而后来发现不需要用它,可以将它去掉而不会产生警告错误,也不需要改动那些调用该函数以前版本的程序代码。