C++基础1

一、形参带默认值的函数

二、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 _cplusplusextern "C"{
#endifint 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 30printf("%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.mzph.cn/news/628152.shtml

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

相关文章

Django的模板语言

文章目录 模板语法变量标签过滤器注释 组件引擎模板上下文加载器上下文处理器 模板引擎的支持配置用法引擎内置后端 模板 作为一个网络框架&#xff0c;Django 需要一种方便的方式来动态生成 HTML。最常见的方法是依靠模板。一个模板包含了所需 HTML 输出的静态部分&#xff0…

Centos7安装K8S

Centos7安装K8S 安装过程中没有出现的错误可以往下 根据以前一些博主写的博客&#xff0c;在小阳翻了不下几十篇博客之后&#xff0c;我果断是放弃了&#xff0c;于是找到了官网地址&#xff0c;然后也有坑 1. 关闭防火墙 systemctl stop firewalld systemctl disable firew…

MySQL的各种日志

目录 一、错误日志 二、二进制日志 1、介绍 2、作用 3、相关信息 4、日志格式 5、查看二进制文件 6、二进制日志文件删除 三、查询日志 四、慢日志 一、错误日志 记录MySQL在启动和停止时&#xff0c;以及服务器运行过程中发生的严重错误的相关信息&#xff0c;当数据库…

Hive使用shell调用命令行特殊字符处理

1.场景分析 数据处理常用hive -e的方式&#xff0c;通过脚本操作数仓&#xff0c;过程中常常遇到特殊字符的处理&#xff0c;如单双引号、反斜杠、换行符等&#xff0c;现将特殊字符用法总结使用如下&#xff0c;可直接引用&#xff0c;避免自行测试的繁琐。 2.特殊字符处理 …

16.桥接模式

桥接模式 介绍 桥接模式是一种结构型设计模式&#xff0c;它通过将抽象部分与实现部分分离&#xff0c;使它们可以独立变化。这种模式通过组合的方式来实现&#xff0c;而不是继承。桥接模式通过将抽象和实现解耦&#xff0c;从而实现抽象和实现的分离&#xff0c;使得系统更加…

Java基础-Java基础知识-运算符-笔记

1.运算符 算数运算符&#xff1a; - * / % 赋值运算符&#xff1a; 定义变量的语法规则&#xff1a;类型 变量名 变量值 比较运算符&#xff1a;> < > < ! 逻辑运算符&#xff1a; &&&#xff1a;断路与&#xff0c;两边全…

Java零基础——Vue基础篇

1.【熟悉】Vue简介 1.1 简介 它是一个构建用户界面单页面的框架 Vue是一个前端框架 https://www.pmdaniu.com/#file UI网站 UI 一般开发者使用蓝湖 工具 看着UI图 写接口 https://lanhuapp.com/web/#/item 是一个轻量级的MVVM&#xff08;Model-View-ViewModel&#xff…

Spring Boot - Application Events 的发布顺序_ApplicationStartingEvent

文章目录 概述Code源码分析 概述 Spring Boot 的广播机制是基于观察者模式实现的&#xff0c;它允许在 Spring 应用程序中发布和监听事件。这种机制的主要目的是为了实现解耦&#xff0c;使得应用程序中的不同组件可以独立地改变和复用逻辑&#xff0c;而无需直接进行通信。 …

MySQL——锁

1 全局锁 上锁后&#xff0c;整个数据库处于只读状态 flush tables with read lock 释放&#xff1a; unlock tables 应用&#xff1a;用于全库逻辑备份 缺点&#xff1a;如果数据量很大&#xff0c;备份会花很多时间&#xff0c;只能读数据&#xff0c;造成业务停滞 如…

SpringBoot 基础介绍以及相关可实现的功能思路

文章目录 简介start 依赖自定义Banner日志管理devtools统一返回接口接口参数校验自定义异常调用远程接口使用 简介 Spring Boot 是基于Spring的开发开发框架&#xff0c;Spring 的缺点是具有大量的配置文件&#xff0c;使用 SpringBoot 约定大于配置&#xff0c;可以让开发者专…

VMware虚拟机忘记密码操作方法

下面已openEuler虚拟机为例&#xff1a; 1、点击重启时&#xff0c;一直按esc&#xff08;鼠标点击一下&#xff0c;确保鼠标在你的虚拟机里面&#xff09; 2、一直到进入到如下页面按e键&#xff08;可能会略有不同&#xff09; 3、按e键后跳转到如下页面 4、在该页面输入 in…

高级定时器

本节主要介绍以下内容&#xff1a; 定时器简介 高级定时器功能框图讲解 一、定时器简介 定时器功能 &#xff1a;定时、输出比较、输入捕获、断路输入 定时器分类 &#xff1a;基本定时器、通用定时器、高级定时器 定时器资源 &#xff1a;F103有2个高级定时器、4个通…

c语言-数据类型(下)

目录 4.实型变量 5.字符常量 直接常量&#xff1a; 转义字符&#xff1a; 6.字符变量 7.字符串常量 五、输出格式总结 整型&#xff1a; 浮点型&#xff1a; 字符及字符串&#xff1a; 指针&#xff08;地址&#xff09;&#xff1a; 六、typedef 七、sizeof一个问…

Python从入门到精通秘籍五

Python速成,每日持续更新,知识点超详细,涵盖所有Python重难点知识及其对应代码,利用碎片化时间,实现Python从入门到精通的飞跃!!! 一、Python的函数基本定义语法 当定义一个函数时,我们使用关键字def,后跟函数名称和一对圆括号。在圆括号内,可以指定任意数量的参数…

Matlab并行编程之GPU

Matlab并行编程之GPU Matlab提供GPU上计算支持: 基础数据类型(gpuArray和对应API),支持GPU计算的内置函数和多个工具包,支持PTX内核对象加载,支持MEX函数使用CUDA C/C开发等。对大规模数据处理&#xff0c;复杂计算&#xff0c;利用GPU计算能提供显著的性能加速效果. Matlab同…

nginx前后端不分离项目代理配置

文章目录 了解举例1&#xff1a;一个项目content-path路径配置为空&#xff0c;使用nginx代理。举例2&#xff1a;配置上项目的content-path&#xff0c;再使用ngxin代理 总结 现在很多时候都是前后端分离的项目&#xff0c;所以配置代理的时候&#xff0c;前端和后端的代理分开…

Docker之网络配置的使用

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是君易--鑨&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的博客专栏《Docker之网络配置的使用》。&#x1f3af;&…

OpenHarmony——Linux之IR驱动

Linux之IR驱动 背景 在光谱中波长自760nm至400um的电磁波称为红外线&#xff0c;它是一种不可见光。红外遥控成本很低&#xff0c;以前广泛应用在电视&#xff0c;空调等电器的控制上面&#xff0c;现在随着蓝牙遥控器慢慢普及&#xff0c;红外遥控越来越少&#xff0c;但在某…

ELK

ELK 的工作原理&#xff1a; &#xff08;1&#xff09;在所有需要收集日志的服务器上部署Logstash&#xff1b;或者先将日志进行集中化管理在日志服务器上&#xff0c;在日志服务器上部署 Logstash。 &#xff08;2&#xff09;Logstash 收集日志&#xff0c;将日志格式化并输…

图像处理:孤立点的检测

图像处理-孤立点的检测 孤立点的检测在图像处理中通常涉及到检测图像中的突变或者边缘&#xff0c;而使用二阶导数是一种常见的方法。一阶导数可以帮助找到图像中的边缘&#xff0c;而二阶导数则有助于检测边缘上的峰值&#xff0c;这些峰值可能对应于孤立点或者特殊的图像结构…