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如何是好

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/282402.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

婴幼儿家庭护理百科知识,宝宝健康成长育儿实用课程

一、教程描述 本套教程由具有丰富育儿经验的多名专家精心打造而成&#xff0c;也是专门提供给准爸妈们学习的实用课程&#xff0c;可以解决宝宝的日常护理、日常喂养、饮食调理、疾病防治、意外护理等多方面问题。课程不仅可以丰富你的育儿知识&#xff0c;而且能够让你把这些…

中央集成式架构量产时代,openVOC方案将引发软件开发模式变革

2024年&#xff0c;中央计算区域控制架构正式进入规模化量产周期&#xff0c;汽车智能化正式迈入2.0时代&#xff0c;产业生态、应用创新、开发模式都将迎来巨大变革。 同时&#xff0c;随着ChatGPT引发的AIGC领域的爆发式增长&#xff0c;人工智能技术掀起全球万亿级信息化应…

63页!嵩山版Java开发手册分享

作为广受欢迎的编程语言之一&#xff0c;Java在软件开发领域扮演着重要的角色。然而&#xff0c;由于Java的灵活性和广泛应用&#xff0c;很容易出现代码质量低下、可读性差、维护困难等问题。为了解决这些问题&#xff0c;阿里巴巴集团发布了一份权威指南——阿里嵩山版Java开…

揭秘HTTP与HTTPS:保障安全的网页传输协议之争

目录 1、前言 2、HTTP与HTTPS的概念及区别 2.1 HTTP的定义与特点 2.2 HTTPS的定义与特点 2.3 HTTP与HTTPS的区别 3、HTTP的工作原理及安全隐患 3.1 HTTP的工作流程 3.2 HTTP的安全隐患 4、HTTPS的工作原理及优势 4.1 HTTPS的工作流程 4.2 HTTPS的加密算法 4.3 HTTP…

java springboot将接口查询数据放在系统中 一小时系统更新一次 避免用户访问接口查询数据库缓慢

真到了公司 很多数据库表 特别是常用的功能业务对应的 都是几百万条起步的数据 查询会比较缓慢 那么 我们就可以不用每次都真的查询数据库 例如 我这里有一个接口 通过 封装的 IBookService.list 函数去查询数据库 接口返回是这样的 我们先在启动类 条件装配上 这个接口所在的…

Jenkins 系列:Jenkins 安装(Windows、Mac、Centos)和简介

文章目录 简介发展历史应用场景 Jenkins 安装部署先决条件硬件要求软件包下载war 包部署linux 系统部署mac 系统部署windows 系统部署安装后基本配置解锁自定义 jenkins 插件创建用户配置更新站点 配置文件 简介 Jenkins前身是 Hudson&#xff0c;使用 java 语言开发的自动化发…

VS2019+OpenCV4.7.0+OpenCV_contrib4.7.0+CUDA安装+配置视频硬解码保姆级别教程

在算法开发过程中&#xff0c;涉及基于opencv的rtsp流硬解码&#xff0c;这里设计结合当前所有的资料&#xff0c;实现了现有opengl相关的所有跟视频硬解码相关的功能&#xff0c;下面对opencv4.7.0的编译流程进行说明&#xff1a; 一、准备工作 下载opencv &#xff1a;open…

Linux服务器搭建笔记-006:拓展/home目录容量

一、问题说明 Ubuntu服务器在使用过程中创建的新用户&#xff0c;每位用户会在/home目录下生成一个属于其个人的主文件夹。如果不限制各个用户的使用空间&#xff0c;所有的用户都会共用/home所挂载的硬盘。在这种多用户情况下&#xff0c;会很快的填满/home目录&#xff0c;导…

移动应用开发:揭秘内侧APP封装台的高效

在数字化浪席卷下&#xff0c;移应用已经成连接企业与用户纽带。为了抢占市场先机&#xff0c;快速发布高质量的移动应用成为业竞争的关键。侧APP封装平因此而诞生&#xff0c;成为了应开发者的得助手。以下是内侧APP封装台的全面解读&#xff0c;助在应用开发海洋中乘风破浪。…

国产芯片ACL16_S 系列 ,低成本物联网安全,可应用物联网认证、 SIM、防抄板和设备认证等产品上

ACL16_S 芯片是针对物联网认证、 SIM、防抄板和设备认证需求推出的高安全芯片。芯片采用 32 位 ARMCortex™-M0 系列内核&#xff0c;片内集成多种安全密码模块&#xff0c;包括 RSA/ECC DES/TDES、 SHA-1/-256、 AES-128/-192/-256 等国际安全算法&#xff0c;支持真随机数发…

松鼠目标检测数据集VOC格式1400张

松鼠是一种可爱的小型哺乳动物&#xff0c;它们属于啮齿动物目&#xff0c;是广泛分布于全球的一类动物。松鼠的外貌非常特别&#xff0c;有着精巧的身体结构和灵活的动作&#xff0c;是森林和城市公园中常见的动物之一。 松鼠通常有中等大小&#xff0c;头部相对较大&#xf…

告别 2023,迎接 2024

告别 2023&#xff0c;迎接 2024 这是 2023 年的最后一篇博客 时间过得可真快啊&#xff0c;仿佛 2023 才刚刚开始&#xff0c;一晃眼&#xff0c;便又接近尾声了 逝者如斯夫&#xff0c;不舍昼夜 现在我一个人坐在实验室中&#xff0c;回想着 2023 发生的种种事情&#xf…

06|调用模型:使用OpenAI API还是微调开源Llama2/ChatGLM?

06&#xff5c;调用模型&#xff1a;使用OpenAI API还是微调开源Llama2/ChatGLM&#xff1f; 让我们带着下面的问题来开始这一节课的学习。大语言模型&#xff0c;不止 ChatGPT 一种。调用 OpenAI 的 API&#xff0c;当然方便且高效&#xff0c;不过&#xff0c;如果我就是想用…

vue3+ts开发干货笔记

总结一下在vue3中ts的使用。当篇记录部分来自于vue官网&#xff0c;记录一下&#xff0c;算是加深印象吧。 纯干笔记&#xff0c;不断补充&#xff0c;想到什么写什么&#xff0c;水平有限&#xff0c;欢迎评论指正&#xff01; 类型标注 props <script setup lang"…

【算法】数论---约数

约数里面的一个重要性质&#xff1a;一个数的约数都是成对存在的(以sqrt(x)为分界线) 一、求一个数的所有约数---试除法 int x; cin>>x; int yue[10000]{0},idx0; for(int i1;i<x/i;i) {if(x%i0){yue[idx]i;cout<<i<<" ";} }for(int iidx-1;i&…

非科班,培训出身,怎么进大厂?

今天分享一下我是怎么进大厂的经历&#xff0c;希望能给大家带来一点点启发&#xff01; 阿七毕业于上海一所大学的管理学院&#xff0c;在读期间没写过一行 Java 代码。毕业之后二战考研失利。 回过头来看&#xff0c;也很庆幸这次考研失利&#xff0c;因为这个时候对社会一…

现实世界中的人工智能:工业制造的 4 个成功案例研究

现实世界中的人工智能&#xff1a;工业制造的 4 个成功案例研究 从抓鸡翅到建立整个虚拟工厂&#xff0c;各种规模的制造商都利用人工智能以更快的速度、更低的成本和更低的风险生产更多的产品。 我们能否让工厂变得足够聪明&#xff0c;在发生故障之前告诉我们&#xff1f;我…

C语言之指针和函数

目录 作为函数参数的指针 二值互换 scanf函数和指针 指针的类型 空指针 标量型 在C语言程序中&#xff0c;指针的一个重要作用就是作为函数参数使用&#xff0c;下面我们就来学习作为函数参数的指针的相关内容。 作为函数参数的指针 假如我有一个神奇的能力&#xff0c;能…

HTML5和JS实现新年礼花效果

HTML5和JS实现新年礼花效果 2023兔年再见&#xff0c;2024龙年来临了&#xff01; 祝愿读者朋友们在2024年里&#xff0c;身体健康&#xff0c;心灵愉悦&#xff0c;梦想成真。 下面是用HTML5和JS实现新年礼花效果&#xff1a; 源码如下&#xff1a; <!DOCTYPE html>…

Apollo自动驾驶:从概念到现实的里程碑

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 ChatGPT体验地址 文章目录 前言1. Apollo Client2. Apollo Server3. Apollo Federation4. Apollo Tracing5. Apollo Codegen6. Apollo Link7. 其他工具和框架结论 &#x1f680;&#x1f…