C++基础1

news2024/11/17 0:18:17

一、形参带默认值的函数

二、inline内联函数 

        内联函数是一种在编译器处理时,将函数的实际代码插入到调用处的方法。通常,函数调用涉及一定的开销,包括保存和恢复调用现场、跳转到函数的代码位置等。而内联函数通过在调用处直接插入函数的代码,避免了这些开销,从而提高了程序的执行效率。

  1. 减少函数调用开销: 内联函数可以减少函数调用时的开销,尤其是对于简短的函数。

  2. 提高程序执行效率: 内联函数能够减少函数调用时的跳转和保存现场恢复现场的开销,有助于提高程序的执行效率。

  3. 避免函数调用开销: 在一些情况下,函数调用会引入额外的开销,如栈帧的创建和销毁。内联函数可以避免这些开销。

 三·函数重载

3.1 什么是函数重载:

        1 . 一组函数,其中函数名相同,参数列表的个数和类型不同,那么这一组函数就称作-函数重载

        2. 一组函数称的上重载必须在同一个作用域

        3. const 或者volatile 的时候,是怎么影响形参类型的

        4. 函数名相同,参数列表不同,仅返回值不同? 不是重载

3.2 为什么c++可以发生函数重载,c不行

        c++产生函数符号的时候,函数名+参数列表类型组成的。

        c产生函数符号的时候,由函数名决定的

3.2 请解释一下多态:

静态(编译时期的)多态:函数重载

动态(运行时期的)多态:

3.3 c调用c++  或c++调用c

        c++无法直接调用c,因为c++生成的函数符号和c生成的不一样,可以用

extern "C"{

    int sum(int a,int b);
}

          c无法直接调用c++

extern "C"{

    int sum(int a,int b);
}

        只要是c++编译器,都内置了_cplusplus这个内置宏

#ifdef _cplusplus
    extern "C"{
#endif
    int sum(int a,int b);
#ifdef _cplusplus
}
#endif

四、const

1.  const修饰的变量不能作为左值,初始化完不能被修改。

const的编译方式不同,在c中const就是当作变量来编译生成指令的,c++中,所有出现const常量名字的地方,都被常量的初始化替换。

2. 在c语言中,const修饰的量可以不用初始化(但是没啥意义) ,但也不是常量,叫做常变量

比如const int a =20 ;  int array[a]={}; 是错误的,不是常量。a作为左值不能被修改,但是可以通过其他方式修改,比如指针。

void main()
{ 
const int a 20;
int*p=(int*)&a;
*p=30;
 // 30 30 30
 printf("%d%d%d\n",a,*p,*(&a));
}
3. 在c++中,,const修饰的量必须初始化,叫做常量

const int a =20 ;  int array[a]={};这是对的。

void main()
{ 
const int a 20;
int*p=(int*)&a;
*p=30;
 // 20 30 20
// 出现a的地方,在编译阶段直接替换
 printf("%d%d%d\n",a,*p,*(&a));
}
void main()
{ 
int b =20;
const int a =b;
int*p=(int*)&a;
*p=30;
 // 30 30 30
// a为常变量,运行时候才能决定
 printf("%d%d%d\n",a,*p,*(&a));
}
4. const修饰的量常出现的错误:

        1.  常量不能直接作为左值

         2.  不能将常量的地址泄漏给一个普通的指针或者普通的引用变量

const int a =10;
int *p =&a;  // 这是不对的    int *   <= const int *
const int a =10;
cosnt int *p =&a;   整型常量指针  这是可以的,保证了a不会被改

 

5. const和一级指针结合

        cosnt修饰的是离它最近的类型

分为两种:       1.const修改指针指向, const int *p;

                        2. const修饰指针本身     int *const p;

const int *p; // *p 不能被赋值 , p = &b可以任意赋值
// 可以任意指向不同的int类型内存,但是不能通过指针间接修改指向内存的值

int const * p; // 同上

int *const p; // const 修改 int *   , p =&b 不能被修改  *p=20可以被修改
// 指针P现在是常量,不能再指向其他内存 , 但可以通过指针解引用 , 修改其指向内存的值

const int * const p;   *p = &b 和p 都不能被赋值

总结const 和指针的类型转换公式

 int *   < =    cosnt int *     错误   整型常量的地址 转换成变量 是错误的

const int *  <=    int *     正确    变量地址, 转成常量地址

int *const p;   // 如果const右边没指针,const不参与类型  ,直接是int *

下面这个是错误的,因为类型转换发生了错误和有a没有a没有关系 

int a= 10;
const int *p =&a;
int *q =p;
6  const和二级指针结合

const int **q;  // **q不能被赋值  *q 和q可以
int *const*q;   // *q不能被赋值   **q 和q可以
int ** const q; // q不能被赋值    **q 和*q可以

发生类型转换时候

int ** <= const int **;  错误的

const int ** <= int **; 错误的

 int ** <= int *const* 错误的是一级指针转换,看的是const*

int * const * <= int **  正确的的是一级指针转换

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

十五.流程控制与游标

流程控制与游标 1.流程控制1.1分支结构之IF1.2分支结构值CASE1.3循环结构之LOOP1.4循环结构之WHILE1.5循环结构之REPEAT1.6跳转语句之LEAVE语句1.7跳转语句之ITERATE语句 2.游标2.1什么是游标2.2使用游标步骤4.3举例4.5小结 1.流程控制 解决复杂问题不可能通过一个 SQL 语句完…

智慧校园大数据平台架构

平台架构 基础硬件层 基础硬件层是由一组低廉的PC或服务器组合构建而成。基础硬件层主要承载着数据的存储、运算、容错、调度和通信等任务,对基础应用层下达的指令进行执行和反馈。 数据集成 大数据特征表现在实时、交互、海量等方面,并且以半结构化、非结构化数据为主,价…

SpringBoot中 如何优雅的 重试调用 第三方API?

引言 在实际的应用中&#xff0c;我们经常需要调用第三方API来获取数据或执行某些操作。然而&#xff0c;由于网络不稳定、第三方服务异常等原因&#xff0c;API调用可能会失败。为了提高系统的稳定性和可靠性&#xff0c;我们通常会考虑实现重试机制。 本文将深入探讨如何在…

基于JAVA的固始鹅块销售系统 开源项目

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 鹅块类型模块2.3 固始鹅块模块2.4 鹅块订单模块2.5 评论管理模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 鹅块类型表3.2.2 鹅块表3.2.3 鹅块订单表3.2.4 鹅块评论表 四、系统展示五、核心代码5.…

vue前端开发自学,祖孙多层级组件嵌套关系数据传输

vue前端开发自学,祖孙多层级组件嵌套关系数据传输&#xff01;官方提供了一个解决方案&#xff0c;就是&#xff0c;在根组件内使用provide,哪个子孙组件想调用这个数据&#xff0c;就可以inject接收就行了。虽然是方便了&#xff0c;但是这个有点要求&#xff0c;就是只能自上…

重新认识Word——页眉页脚

重新认识Word——页眉页脚 节设置页脚第X页&#xff0c;共Y页 奇偶页不同页眉包含章节号清除页眉横线 我们之前已经全面的构建了我们的文章&#xff0c;现在我们来了解一下&#xff0c;我们毕业论文的页眉&#xff08;页面信息&#xff09;页脚&#xff08;页码&#xff09;的设…

JVM运行时数据区(下篇)

紧接上篇&#xff1a;JVM运行时数据区&#xff08;上篇&#xff09;-CSDN博客 堆 一般Java程序中堆内存是空间最大的一块内存区域。创建出来的对象都存在于堆上。 栈上的局部变量表中&#xff0c;可以存放堆上对象的引用。静态变量也可以存放堆对象的引用&#xff0c;通过静态…

Java中的Servlet你了解吗?

☆* o(≧▽≦)o *☆嗨~我是小奥&#x1f379; &#x1f4c4;&#x1f4c4;&#x1f4c4;个人博客&#xff1a;小奥的博客 &#x1f4c4;&#x1f4c4;&#x1f4c4;CSDN&#xff1a;个人CSDN &#x1f4d9;&#x1f4d9;&#x1f4d9;Github&#xff1a;传送门 &#x1f4c5;&a…

《数据结构》实验报告-实验一 线性结构及其应用

《数据结构》实验报告-实验一 线性结构及其应用 一、问题分析 题目要求收集两个班的学生成绩信息并按降序排列&#xff0c;其中每个学生的数据包括班级&#xff0c;学号和成绩信息&#xff0c;需要用一个结构体作为整体存储。并且数据是可以不断添加进来的&#xff0c;可以用…

c语言实现b树

概述&#xff1a;B 树&#xff08;B-tree&#xff09;是一种自平衡的搜索树数据结构&#xff0c;广泛应用于数据库和文件系统等领域。它的设计旨在提供一种高效的插入、删除和查找操作&#xff0c;同时保持树的平衡&#xff0c;确保各个节点的深度相差不大。 B 树的特点包括&a…

Vue keep-alive的使用和原理解析

✨ 专栏介绍 在当今Web开发领域中&#xff0c;构建交互性强、可复用且易于维护的用户界面是至关重要的。而Vue.js作为一款现代化且流行的JavaScript框架&#xff0c;正是为了满足这些需求而诞生。它采用了MVVM架构模式&#xff0c;并通过数据驱动和组件化的方式&#xff0c;使…

基于ssm的中文学习系统的设计与实现+jsp论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本中文学习系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据信息&am…

Linux工具-搭建文件服务器

当我们使用linux系统作为开发环境时&#xff0c;经常需要在Linux系统之间、Linux和Windows之间传输文件。 对少量文件进行传输时&#xff0c;可以使用scp工具在两台主机之间实现文件传输&#xff1a; rootubuntu:~$ ssh --help unknown option -- - usage: ssh [-46AaCfGgKkMN…

C语言辨析——这个字符串长度是多少?

1. 问题 请问字符串"\tac\b\b\x41\nc\104\""的长度是多少&#xff1f; 2. 解答 该字符串的长度为10。这10个字符分别是水平制表符\t&#xff0c;a&#xff0c;c&#xff0c;两个退格符\b&#xff0c;\x41对应的字符’A&#xff0c;换行符\n&#xff0c;c&…

R语言【paleobioDB】——pbdb_subtaxa():统计指定类群下的子类群数量

Package paleobioDB version 0.7.0 paleobioDB 包在2020年已经停止更新&#xff0c;该包依赖PBDB v1 API。 可以选择在Index of /src/contrib/Archive/paleobioDB (r-project.org)下载安装包后&#xff0c;执行本地安装。 Usage pbdb_subtaxa (data, do.plot, col) Arguments…

NLP论文阅读记录 - 2021 | WOS 基于动态记忆网络的抽取式摘要

文章目录 前言0、论文摘要一、Introduction1.1目标问题1.2相关的尝试1.3本文贡献 二.前提三.本文方法四 实验效果4.1数据集4.2 对比模型4.3实施细节4.4评估指标4.5 实验结果4.6 细粒度分析 五 总结思考 前言 Extractive Summarization Based on Dynamic Memory Network&#xf…

【学习iOS高质量开发】——熟悉Objective-C

文章目录 一、Objective-C的起源1.OC和其它面向对象语言2.OC和C语言3.要点 二、在类的头文件中尽量少引用其他头文件1.OC的文件2.向前声明的好处3.如何正确引入头文件4.要点 三、多用字面量语法&#xff0c;少用与之等价的方法1.何为字面量语法2.字面数值3.字面量数组4.字面量字…

chrome浏览器开启硬件加速无法打开提示“此设置有你的管理员管理“

chrome浏览器开启硬件加速无法打开提示"此设置有你的管理员管理" winR 输入regedit 打开注册表注册表搜索 计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Chrome删除 HardwareAccelerationModeEnabled重启Chrome浏览器。打开Chrome浏览器&#xff0c;查看设置…

【Java数据结构 -- 实现双链表的接口方法】

双链表 1.双链表2.双链表的创建3.双链表的头插节点4.双链表尾插5.双链表根据索引找节点6.双链表根据索引插入节点7.双链表删除值为key的节点8.删除所有值为key的节点9.双链表是否包含值为key节点10.双链表大小11.清空双链表12.打印双链表 1.双链表 双链表是一种数据结构&#…

【MATLAB】 SSA奇异谱分析信号分解算法

有意向获取代码&#xff0c;请转文末观看代码获取方式~ 1 基本定义 SSA奇异谱分析&#xff08;Singular Spectrum Analysis&#xff09;是一种处理非线性时间序列数据的方法&#xff0c;可以对时间序列进行分析和预测。 它基于构造在时间序列上的特定矩阵的奇异值分解&#…