美文网首页
函数重载(Overload) 默认参数

函数重载(Overload) 默认参数

作者: 曹来东 | 来源:发表于2019-06-11 17:15 被阅读0次

    函数名完全相同,但参数个数,参数类型和顺序不同的函数,彼此构成函数重载.C语言不支持函数重载.

    规则

    • 函数名相同
    • 参数个数不同,参数类型不同,参数顺序不同.

    注意

    • 返回值类型与函数重载无关
    int fun() {}
    float fun() {}
    

    这两个函数不能构成函数重载.会报错.因为引起了 歧义,二义性.

    int fun(int a) {}
    float fun() {}
    

    函数名相同,参数个数不同,这两个行数构成重载.与返回值无关.

    void display(long a){}
    void display(int a){}
    void display(double a){}
    
    dispaly(10)//void display(int a)
    dispaly(10L)//void display(long a)
    dispaly(10.0)//void display(double a)
    

    此时以上三个函数构成重载.

    void display(long a){}
    void display(double a){}
    dispaly(10)
    

    此时报错,参数的隐式转换,导致 二义性,编译器不知道把int 10转换成long类型还是double类型.所以报错.

    C++为什么可以支持函数重载

    • 采用了name mangling或者叫那么decoration技术
    • C++编译器默认会对符号名(比如函数名)进行改编,修饰,有些地方翻译为'命名倾轧'
    • 重载时回生成多个不同的函数名,不同编译器(MSVC,g++)有不同的规则.

    默认参数

    C++允许函数设置默认参数,在调用时可以根据情况省略实参.

    规则如下:

    • 默认参数只能按照从右到左的顺序
    • 如果函数同时又声明,实现,默认参数只能放在函数声明中
    • 默认参数的值可以是常量,全局符号(全局变量,函数名)

    相关文章

      网友评论

          本文标题:函数重载(Overload) 默认参数

          本文链接:https://www.haomeiwen.com/subject/zksqfctx.html