Thinking in C++【6】函数重载与默认参数

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){
          
           /.../ }
    

这种无标识符的称为占位符。这种语法的目的在于**以后可以修改函数定义而不需要修改所有的函数调用。**更重要的是,如果开始使用了一个函数参数,而后来发现不需要用它,可以将它去掉而不会产生警告错误,也不需要改动那些调用该函数以前版本的程序代码。

猜你喜欢

转载自blog.csdn.net/qq_43118572/article/details/112341313