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

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

0101包冲突导致安装docker失败-docker-云原生

文章目录 1 前言2 报错3 解决结语 1 前言 最近在学习k8s&#xff0c;前置条件就是要安装指定版本的docker&#xff0c;命令如下 yum install -y docker-ce-20.10.7 docker-ce-cli-20.10.7 containerd.io-1.4.62 报错 file /usr/libexec/docker/cli-plugins/docker-buildx fr…

git解决冲突场景

文章目录 git解决冲突场景 git解决冲突场景 假设我们在公司开发了一个功能修改了一个文件 我们现在模拟修改文件之后提交一个版本到本地&#xff0c;但是不上传到远程仓库 假设我们现在回到家开发代码&#xff0c;需要拉去最新的代码 提示已经更新。根本没有最新的代码改动&am…

【超图】SuperMap iClient3D for WebGL/WebGPU —— 坐标系位置 —— Cartesian2

作者&#xff1a;taco 说到关于地理必然逃不开位置的关系。借用百度百科的内容来说地理学&#xff08;geography&#xff09;&#xff0c;是研究地球表层空间地理要素或者地理综合体空间分布规律、时间演变过程和区域特征的一门学科。所以位置&坐标系必然逃不掉了。那么在S…

Cisco模拟器-OSPF路由协议

设计要求用两台双口路由器连接不同IP网段的计算机&#xff0c;并使用OSFP协议发现路由表使不同IP网段的计算机可以相互通信。 通过设计&#xff0c;可以连通IP地址网段不同的局域网&#xff0c;可应用在园区网的互连和互通的实现上。 主要配置步骤 路由器0&#xff1a; Router…

C# WPF上位机开发(以始为终,寻找真实的上位机需求)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 c# wpf、qt、mfc这些上位机的需求是真实存在的&#xff0c;在现实中有很多应用的地方&#xff0c;这一点大家都很清楚。而程序员本身呢&#xff0c…

OpenGauss 之索引查找和匹配

一. 前言 本文主要通过走读OpenGuass的代码&#xff0c;来了解查询的时候OpenGuass是如何查找表的索引信息以及根据谓词条件过滤掉无用的索引信息的。 二. 索引路径匹配流程 1. 首先OpenGuass在build_simple_rel的时候&#xff0c;首先将一个表以及与他相关的索引都加到rel-&g…

书摘:C 嵌入式系统设计模式 05

本书的原著为&#xff1a;《Design Patterns for Embedded Systems in C ——An Embedded Software Engineering Toolkit 》&#xff0c;讲解的是嵌入式系统设计模式&#xff0c;是一本不可多得的好书。 本系列描述我对书中内容的理解。 书中大量使用了 UML 表示法&#xff0…

FTP简介及搭建计算机端口的介绍

目录 一. FTP的简介 二. FTP的主要作用 三. 搭建FTP服务器 3.1 开启防火墙 3.2 创建组 3.3 创建用户 3.4 用户绑定组 3.5 安装FTP服务器 3.6 配置FTP服务器 3.7 配置FTP文件夹的权限 3.8 连接测试 3.8.1 服务器本机测试 3.8.2 外部服务器测试 3.8.3 借助工具MobalXterm 四…

7.12全排列②(LC47-M)

算法&#xff1a; 这道题目和46.全排列 (opens new window)的区别在与给定一个可包含重复数字的序列&#xff0c;要返回所有不重复的全排列。 所以就是多了个去重操作。 还是一样的套路&#xff1a; 先排序&#xff1a; Arrays.sort(nums); 再去重&#xff1a; // used[…

RainBond 构建组件 rbd-chaos 故障解决 【真实案例】

文章目录 背景分析官方排查说明尝试进一步分析解决参考背景 在 RainBond 中把所有组件都部署了至少 2 个实例后,开始出现构建/滚动更新直接报错,且没有日志(查看日志按钮点击后,里面啥也没有)。 然后再平台管理主界面,可以看到提示 rbd-chaos 组件故障: 分析 官方排…

中小微医院机构云服务(云HIS)平台源码

云HIS&#xff08;Cloud-Based Healthcare Information System&#xff09;重新定义了HIS&#xff0c;目标是为中小型医疗卫生机构提供优质经济的医疗卫生信息化产品及服务&#xff1b;是以健康档案为主线、以电子病历为核心、以云计算技术为基础的医疗卫生系统。云HIS作为基于…

【已解决】若依系统前端打包后,部署在nginx上,点击菜单错误:@/views/system/role/index

​ 上面错误&#xff0c;是因为/views/system/role/index动态路由按需加载时候&#xff0c;错误导致。 解决办法&#xff1a; 如果您的前端项目访问时候&#xff0c;需要带有项目名称的话&#xff0c;参考凯哥上一篇文章&#xff1a;【已解决】若依前后端分离版本&#xff0…