C++重载函数、带有默认参数的函数、内联函数

重载函数

1、定义:在同一个名字空间中存在两个或者多个具有相同名字的函数所构成的语法现象。
Note:
(1)调用重载函数的语句,是由编译器在编译期确定的。
(2)编译器判断某个函数调用语句所对应的重载函数时,判断依据是***函数参数的类型、个数和次序***。
(3)如果编译器无法判定,就会报告二义性错误。

带有默认参数值的函数

在这里插入图片描述

内联函数

1、普通函数调用:
函数调用时:参数及部分CPU寄存器的内容进栈,控制流跳转
函数返回时:返回值及寄存器值出栈,控制流跳转
2、目的:减小函数调用开销
3、方法:代码插入到调用处
4、结果:导致程序变大(因为要将内联函数展开)
编译器在遇到内联函数的调用时,会将内联函数的函数体展开到调用位置,从而避免函数调用的开销。
一般来说,内联函数只有在需要考虑程序运行性能的环境中才使用。
程序员所用的 inline 关键字,只是对编译器的一个请求。内联函数是否展开(程序过大会忽略inline关键字),是由编译器决定的。
5、定义内联函数:在函数前面加上关键字inline

// 定义内联函数
inline int max (int a, int b) {
    return (a > b ? a : b);
}

// Calling (调用内联函数)
int  x = max (3, 5);
int  y = max (0, 8);

// Inline expansion(内联展开)
int  x = (3 > 5 ? 3 : 5);
int  y = (0 > 8 ? 0 : 8);

补充:
1、以下情况不宜用内联:
(1)如果函数体内的代码比较长,使得内联将导致内存消耗代价比较高
(2)如果函数体内出现循环,那么执行函数体内代码的时间要比函数调用的开销大
2、类中定义的函数为隐式内联函数,在函数名前加上inline定义为显示内联函数。
3、虚函数可以是内联函数,内联是可以修饰虚函数的,但是当虚函数表现多态性的时候不能内联。
原因:内联是在编译器建议编译器内联,而虚函数的多态性在运行期,编译器无法知道运行期调用哪个代码,因此虚函数表现为多态性时(运行期)不可以内联。

#include <iostream>
using namespace std;
class Base
{
public:
    inline virtual void who()
    {
        cout<< "I am Base"<<endl;
    }
    virtual ~Base(){}
};
class Derive: public Base
{
public:
    inline void who()
    {
        cout<<"I am Derive"<<endl;
    }
    virtual ~Derive(){}
};
int main(void)
{
    //此处虚函数who(),是通过Base具体对象b来确定的,编译期间就可以确定了,所以它可以是内联的,但最终是否内联取决于编译器
    Base b;
    b.who();
    //此处的虚函数who(),是通过指针调用的,呈现多态性,运行期间才能确定,所以不能为内联。
    Base *p = new Derive();
    p->who();

    delete p;
    p = nullptr;

    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C联函数是一种与类一起使用的功能。如果一个函数被声明为内联的,编译器会将该函数的代码副本放入每个调用该函数的地方。这样可以减少函数调用的开销,提高程序的执行效率。通过指示编译器将函数定义为内联函数,可以替代函数的调用,从而在编译时进行代码替换,而不是在运行时引用函数定义。内联函数的主要优势在于它可以减少函数的调用开销,因为函数调用涉及到堆栈操作,而内联函数直接展开在调用的地方,避免了函数调用的开销,从而提高程序的执行效率。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [C++ 实验1 重载函数内联函数的应用 ](https://download.csdn.net/download/weixin_52516491/88014519)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [C++的内联成员函数内联函数](https://blog.csdn.net/wenchm/article/details/130764637)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [c++内联函数](https://blog.csdn.net/travel_dream/article/details/125921537)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值