美文网首页
c++之重载函数

c++之重载函数

作者: 全村的卡密 | 来源:发表于2020-02-25 23:43 被阅读0次

    函数重载:
    1.函数名相同
    2.函数参数个数不同,参数顺序不同,参数类型不同

    注意:
    1.函数重载与返回值类型无关。
    2.调用函数时,实参的隐式类型转换可能产生二义性

    //编译器可能重命名为 display_void
    void display(long a){
    cout<<a<<endl;
    }
    //编译器可能重命名为 display_double
    void display(double a){
    
    }
    //报错,隐式类型转换不知转换成long还是double类型
    display(10);
    

    为什么c++能重载函数:

    • c++实用了一种 name mangling的技术
    • c++编译器会对函数名进行修改、修饰
    • 重载时会生成多个不同的函数名,不同编译器有不同生成规则


      汇编

      用vscode汇编查看,可以看到每个display的函数地址是不同的,说明每个display都被重新命名并是独立不同的函数,而vscode把每个函译为display只是为了方便程序员查看调用了哪个函数。

    tips:
    c++编译的debug模式和release模式,后者会对代码进行优化。
    debug模式中:

    image.png
    release模式:
    release
    该模式不会在调用display函数,而是直接用cout函数替换display函数。执行更高效。

    用IDA(反汇编软件)打开release禁止优化后的程序。可以证实name mangling的存在。


    image.png

    相关文章

      网友评论

          本文标题:c++之重载函数

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