当前位置: 首页 > news >正文

湖南长沙seo网络优化工程师吃香吗

湖南长沙seo,网络优化工程师吃香吗,普通的旧房装修价格,b2b模式网站一、函数重载 1、什么是函数重载? 在同一作用域下,函数名相同,参数列表不同的函数构成重载关系 函数重载与返回值类型、参数名无关 与作用域是否相同,以及参数列表的数量、参数类型、常属性不同等有关 2、C是如何实现函数重载的&a…

一、函数重载

    1、什么是函数重载?

    在同一作用域下,函数名相同,参数列表不同的函数构成重载关系

    函数重载与返回值类型、参数名无关

    与作用域是否相同,以及参数列表的数量、参数类型、常属性不同等有关

    2、C++是如何实现函数重载的?

    通过g++ -S 生成汇编代码可知,编译器会把函数的参数类型进行缩写后追加到函数名的末尾形成新的函数名,既是进行了换名操作,从而确保编译结果函数名不重复

    3、extern "C" 

    因为通过C++编译器编译函数、调用语句时,会变成换名后的名字,但是项目中有可能需要去调用已经通过C编译器编译好的函数,它们是没有换名的,因此会调用失败

    因为大部分情况下C编译好的文件无法重新使用C++编译器编译,所以只能想办法让C++编译器在调用C编译的函数时不要换名

    通过 extern "C"{xxx} 让C++编译器按照C语言的格式编译函数,从而让调用语句与被调用函数名同名,这样就可以正确地调用C标准库、系统函数

    4、重载和隐藏

    在同一作用域下,函数名相同,参数列表不同的函数构成重载关系

    在不同作用域下,同名函数构成了隐藏

    5、参数类型不匹配

    当调用函数时,编译器会优先调用类型最匹配最精确的版本函数,如果没有最正确的,则会先做类型转换后再匹配,但如果没有能够进行类型转换匹配的版本最后也会报错

    但是不建议通过类型转换去调用函数,因为转换情况与编译器有关

二、默认形参

    1、什么是默认形参

    在C++中可以给函数的参数设置默认值,当函数被调用时如果调用者提供了实参则使用实参调用,如果没有提供则使用默认值调用

    2、默认形参要靠右

    如果函数有多个参数,并设置了默认形参,要遵循从右往左依次设置默认形参

    3、只能在函数声明中设置默认形参

    如何函数声明与定义分开实现,只能在函数声明中设置默认形参,否则语法错误

    4、默认形参可能会影响函数重载

    如果对函数进行了重载,又设置了默认形参,调用时可能会有冲突和歧义,调用失败

    因此对于重载过的函数设置默认形参时一定要谨慎

三、内联函数

    1、普通函数

    普通函数会被编译成二进制指令存储在代码段中,调用语句会生成一条跳转指令,当程序运行到调用语句时,会跳转该函数在代码段中对应的位置执行,执行结束会返回

    2、什么是内联函数

    内联函数也会被翻译成二进制指令,但调用语句不会生成跳转指令,而是直接把内联函数的二进制指令进行替换,就没有跳转和返回,而是直接执行二进制指令,这种函数称为内联函数

    3、显式内联和隐式内联

        显式内联:

        在函数的返回值前加 inline 该函数就以内联函数的机制调用

        隐式内联:

        在结构、联合、类中的成员函数会自动被当做内联函数处理

            注意:如果在结构、联合、类中声明成员函数,但是在外面定义,则不会当做内联函数处理

       

        注意:函数是否被内联由编译器以及它的优化等级决定,加 inline 只是有可能影响它的决定

        注意:g++默认优化等级 -O -O1 下所有的内联函数都会当成普通函数处理

            在-O2 -O3的优化级别下,甚至普通函数都可能会被当做内联函数处理

        注意: c99 也支持 inline

   

    4、内联的适用条件

        优点:节约了函数传参、跳转、返回的时间,提高代码的运行速度

        缺点:当被多个位置调用时,那么二进制指令会被拷贝多份,产生了冗余,导致可执行文件明显增加

        适用条件:

        1、适合内容简单且同一位置频繁调用的函数

        2、不适合内容多、且多个位置、较少调用的函数,因为节约的时间还弥补不过牺牲的空间

        3、带有递归属性的函数无法内联,编译器会自动忽略

    5、内联函数和宏函数的相同点和不同点

        相同点:都是采用以空间换时间的策略提高程序的运行速度,减少函数调用跳转的耗时

        不相同:

        1、宏函数不是真正的函数,只是语句替换,不会对参数进行类型检查、没有返回值、安全性低

        2、内联函数是真正的函数、严格检查参数类型、有返回值、安全性高

四、引用

    什么是引用:引用就是一种取别名的机制

    为什么要使用指针:

    1、跨函数共享变量(输出型参数),引用可替代  //06

    2、提高传参效率,引用可替代,效率比指针还高,不拷贝字节

    3、配合堆内存使用,只能使用指针

    4、配合字符串使用,string类可以替代

    引用使用格式:

        类型名& 别名 = 数据;    //类型名& 别名=变量名; 数据是常量 所以要加const保护

    什么情况下使用引用:

        1、跨函数共享变量,引用比指针更安全(无需直接操作地址空间、不存在空引用,也极少出现野引用问题)、也比指针更方便(无需缺地址、解引用)

        2、提高传参效率,引用的效率比指针还高,指针最起码还要传递4/8字节的地址编号,但是引用一个字节都不需要传递,但是引用和指针一样都有被修改的风险,因此为了保护目标需要增加const

   

    使用引用需要注意的问题:

        1、引用必须初始化,所以不存在空的引用

        2、可以引用右值,但是必须使用const修饰引用

        3、引用不能中途更改引用的目标

        4、函数的返回值类型可以是引用类型,但不能返回局部变量的引用

   

    指针与引用的相同点和不同点?

    相同点:

        1、都可以跨函数共享内存,都可以提高函数传参效率、也需要const保护

        2、可以定义数组指针,也可以定义数组引用

            int arr[5] = {1,2,3,4,5};

            int (*arrp)[5] = &arr;

            int (&hehe)[5] = arr;

        3、可以定义函数指针,可以定义函数引用

            void (*fp)(void) = func;

            fp();

            void (&xixi)(void) = func;

            xixi();

    不同点:

        1、引用是一种取别名的机制,指针是一种数据类型

        2、引用不需要额外存储空间,指针需要4/8字节用于存储内存地址

        3、指针可以不初始化,引用必须初始化

        4、指针有空指针,但没有空引用

        5、指针可以更改指向的目标,但引用不可以

        6、指针可以配合堆内存使用,而引用不行

        7、可以定义指针数组,但不能定义引用数组

五、C++的强制类型转换

    C语言原来的强制类型转换依然可以在C++中继续使用

        (新类型)数据

    注意:强制类型转换都只是得到一个临时结果,数据原来的类型不会改变

    为什么C++要重新设计强制类型转换?

        因为C语言的强制类型转换虽然自由度高,但是非常危险,没有任何要求限制

    为什么C++之父设计强制类型转换设计得很复杂、使用很麻烦?

        因为他认为只有在程序设计不合理的情况下才需要强制类型转换,之所以设计复杂就是不想让程序员使用,而是去反思、重新设计自己的代码

    1、静态类型转换

    static_cast<目标类型>(原数据)

    目标类型和原数据类型之间必须有一个方向能够自动类型转换,否则出错        //比如int和int*之间就不能

    2、动态类型转换

    dynamic_cast<目标类型>(原数据)

    目标类型和原数据类型之间必须存在继承关系,并且目标类型必须是指针类型或引用类型,否则出现错误

    3、去常类型转换

    const_cast<目标类型>(原数据)

    目标类型必须是指针或引用,且除了const属性不同,其它都要相同,否则出现报错

    4、重解释类型转换

    reinterpret_cast<目标类型>(原数据)

    只能把整数转成指针,或者把指针转成整数,否则会出错

http://www.dt0577.cn/news/1753.html

相关文章:

  • 哈尔滨网站关键词优化排名重庆网站排名
  • 做网站签到挣钱吗上海疫情又要爆发了
  • web网站开发的基本流程如何做网站seo排名优化
  • 衡水做网站技术客户营销
  • 外贸建站用什么服务器推广平台
  • 林州网站建设哪家专业关键词生成器
  • react怎么做pc网站网络推广营销方式
  • 手机版网站怎样做推广上海排名seo公司
  • 什么是网站维护中公众号推广费用一般多少
  • 做外贸 网站没有邮箱怎么找软文广告案例分析
  • 做网站都有跳转链接最近的国际新闻热点
  • wordpress魔客重庆百度推广seo
  • 网站建设需要注意哪些关键细节域名解析在线查询
  • 网站网监办理网站建设首页
  • 网站前端设计常见的网络直接营销有哪些
  • 新手如何学会做网络销售信息流优化师招聘
  • 邢台网站建设最新报价网络营销的新特点
  • 镇江做网站公司友情链接多少钱一个
  • 电子商务网站建设投资预算建立免费网站
  • 光明楼网站建设上海百度推广电话
  • 网站开发人员配置宁波seo推荐
  • 做企业网站对企业的好处肇庆网站搜索排名
  • wordpress图片加链接seo检测
  • wordpress首页描述湖南企业seo优化
  • 自己做网站可以上传软件下载吉安seo网站快速排名
  • 南宁网站建设接单谷歌seo 优化
  • 文字图片设计制作在线潍坊seo按天收费
  • 济南有哪些网站是做家具团购的百度怎么投广告
  • 上海网络维护薪水一般多少整站快速排名优化
  • 网站有了如何做推广国产长尾关键词拘挖掘