C++初阶——基础知识(内联函数)

目录

1.内联函数

内联函数的示例代码


1.内联函数

是一种 C++ 中的函数定义方式,它告诉编译器在每个调用点上插入函数体的副本,而不是像普通函数那样在调用时跳转到函数体所在的地址执行。这样可以减少函数调用的开销,提高程序的执行效率。

使用内联函数的优点包括:

  1. 减少函数调用时的开销:由于函数调用会涉及保存现场、跳转和恢复现场等操作,使用内联函数可以避免这些开销。
  2. 提高程序执行效率:通过将函数体插入到调用点处,可以减少函数调用带来的额外开销,从而提高程序的执行效率。
  3. 避免函数调用带来的额外开销:在一些简单的函数中,函数调用的开销可能比函数本身的执行开销还要大,使用内联函数可以避免这种情况。

然而,内联函数并非适合所有情况。内联函数适用于函数体较小且频繁调用的情况。在一些复杂的函数或者需要进行递归调用的情况下,内联函数可能会引起代码膨胀,影响程序的执行效率。要声明内联函数,可以在函数定义前加上inline关键字,告诉编译器将其作为内联函数处理。需要注意的是,inline只是一个建议,编译器可以选择是否真正将函数作为内联函数处理。

内联函数是在编译器处理代码时,将函数的定义插入到每个调用点处的一种优化手段。通过内联函数,可以避免函数调用的开销,提高程序的执行效率。

以下是一个使用

内联函数的示例代码

#include <iostream>
using namespace std;

// 声明内联函数
inline int add(int a, int b) {
    return a + b;
}

int main() {
    int x = 1, y = 2;
    cout << add(x, y) << endl; // 内联函数调用

    return 0;
}

在这个例子中,我们使用关键字inline来声明内联函数add。在main函数中,我们直接调用了内联函数add,而不是通过函数调用的方式。编译器会在编译过程中将内联函数的定义插入到调用点处,从而避免了函数调用的开销。

需要注意的是,内联函数适用于函数体较小且频繁调用的情况。编译器对于是否将函数内联展开的决策是由编译器自行决定的,它可能会忽略inline关键字并将其视为普通函数。因此,建议将函数定义放在头文件中,并尽量避免在循环或递归等复杂情况下使用内联函数。总结起来,内联函数是一种优化手段,通过在编译过程中将函数的定义插入到调用点处,减少函数调用的开销,提高程序的执行效率。

2.引用

引用的过程中权限不能放大大。

C++中的引用是一种指向其他变量或对象的标识符,用于对其进行访问和操作。在使用引用时,需要注意不能将权限放大。

具体来说,当使用引用时,不能将其绑定到一个比其所绑定变量拥有更大访问权限的变量上。例如,如果一个引用绑定到了一个私有成员变量上,那么不能将其转换为指向公有成员变量的引用。否则,这将导致代码中的权限泄漏。

以下是一个权限泄漏的示例代码

#include <iostream>
using namespace std;

class A {
public:
    int x;
private:
    int y;
};

int main() {
    A a;
    a.x = 1;
    // 错误:引用不能放大访问权限
    // int& b = a.y;
    return 0;
}

在这个例子中,我们定义了一个类A,其中包含一个公有成员变量x和一个私有成员变量y。在main函数中,我们创建了一个A类型的对象a并给x赋值。如果要将y的值赋给一个引用,那么就会出现权限泄漏问题。因此,如果尝试这样做,编译器会报错。总之,使用引用时需要遵循“不能将权限放大”的原则,避免代码中的权限泄漏问题。

 3.例题

1.“引用”与指针的区别是什么( )

A.指针通过某个指针变量指向一个对象后,对它所指向的变量间接操作。程序中使用指针,程序的可读性差;而引用本身就是目标变量的别名,对引用的操作就是对目标变量的操作

B.引用通过某个引用变量指向一个对象后,对它所指向的变量间接操作。程序中使用引用,程序的可读性差;而指针本身就是目标变量的别名,对指针的操作就是对目标变量的操作

C.指针比引用更节省存储空间

D.以上都不正确

A.指针是间接操作对象,引用时对象的别名,对别名的操作就是对真实对象的直接操作,故正确

B.很显然,答案刚好相反

C.指针需要开辟空间,引用不需要开辟空间,故错误

D.一山不容二虎,A正确,D如何是好

  • 25
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tech行者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值