C++八股文之语言基础篇

🤖个人主页:晚风相伴-CSDN博客

思维导图链接:C++语言基础

持续更新中……

💖如果觉得内容对你有帮助的话,还请给博主一键三连(点赞💜、收藏🧡、关注💚)吧

🙏如果内容有误或者有写的不好的地方的话,还望指出,谢谢!!!

让我们共同进步

​​

目录

1、C语言和C++的区别

 2、struct和class的区别

3、C语言和C++结构体的区别 

4、静态链接和动态链接

5、C语言和C++编译时的区别

6、static关键字的作用 

7、函数指针

 8、静态变量什么时候初始化

9、野指针 

10、内联函数和宏的区别 

11、new和malloc的区别 

12、指针和引用的区别 

13、内存泄漏 

14、热重载 


1、C语言和C++的区别

  1. C语言是C++的子集,C++可以很好兼容C语言。此外C++又有很多新的特性,如引用、智能指针等等
  2. C++是面向对象的编程语言,C语言是面向过程的编程语言
  3. C语言有一些不安全的语言特性,如指针使用的潜在危险、强置类型转换的不确定性、内存泄漏等,C++对此增加了不少新特性来改善安全性,如引用、智能指针、try-catch异常等。
  4. C++复用性高,C++引入了模板和STL库相比于C语言更灵活、更通用

 2、struct和class的区别

  1. struct一般用于描述一个数据结构集合,而class是对一个对象数据的封装
  2. struct中默认的访问控制权限是public,而class中默认的访问控制权限是private
  3. 在继承关系中,struct默认是公有继承,而class默认是私有继承
  4. class可以用于定义模板参数,而struct不能

3、C语言和C++结构体的区别 

  1. C语言的结构体内不允许有函数的存在,C++允许有内部成员函数,且允许该函数是虚函数
  2. C的结构体内部成员变量的访问权限只能是public,而C++允许public、protected、private。
  3. C语言的结构体是不可以继承的,C++的结构体是可以从其他结构体或类继承过来的
  4. C语言中使用结构体需要加上struct关键字,而C++则可以省略该关键字

4、静态链接和动态链接

静态链接,是在链接的时候就已经把要调用的函数或者过程链接到了生成的可执行文件中。Windows下以.lib为后缀,Linux下以.a为后缀
动态链接,是在代码运行过程中,再去找要链接的函数。Windows下以.dll为后缀,Linux下以.so为后缀。

5、C语言和C++编译时的区别

因为C++支持函数重载,所以在编译时不仅仅是函数名,还会将函数的参数类型也加到编译后的代码中;C语言不支持重载,所以在编译时一般只包括函数名

6、static关键字的作用 

  1. 定义全局静态变量和局部静态变量,在变量前加static。初始化的静态变量会在数据段分配内存,未初始化的静态变量会在BSS段分配内存。只不过全局静态变量和局部静态变量的作用域不一样。
  2. 定义静态函数和静态变量,静态函数和静态变量只能在本源文件中使用
  3. 定义类中的静态成员变量和静态成员函数。类中的所有成员变量拥有一块单独的存储区,而不管创建了多少个该类的对象。所有这些对象的静态数据成员都共享这一块静态存储空间
  4. C++中规定,静态成员函数中没有this指针,因为它不属于任何一个对象

​ 

7、函数指针

  1. 函数指针就是指向函数的指针变量。每一个函数都有一个入口地址,该入口地址就是函数指针所指的地址
  2. 定义 int func(int a);     int (*f)(int a);  f = &func; 
  3. 应用场景:回调

 8、静态变量什么时候初始化

对于C语言的全局和静态变量,初始化发生在任何代码执行之前,属于编译期初始化。
C++标准规定,全局或静态对象当且仅当对象首次用到时才进行构造 

9、野指针 

  1. 野指针就是指针指向的位置是不可知的
  2. 产生原因:释放内存后指针没有及时置空,依然指向了该内存,那么可能出现非法访问的错误。
  3. 避免办法:初始化置NULL、申请内存后判空、指针释放后置NULL、使用智能指针

10、内联函数和宏的区别 

  1. 宏定义不是函数,内联本质上是一个函数
  2. 宏定义在预编译的时候就把所有宏名来替换,而内联函数是在编译时进行代码插入,并且在调用的地方将内容展开,这样可以省去函数调用的开销,提高效率
  3. 宏定义没有类型检查,而内联函数会进行类型检查

11、new和malloc的区别 

  1. new是操作符,而malloc是函数
  2. new在调用时先分配内存,再调用构造函数,释放时调用析构函数,而malloc没有构造函数和析构函数
  3. malloc需要给定申请内存的大小,返回时的指针需要强转;new会调用构造函数,不用指定内存的大小,返回指针不用强转
  4. new可以被重载,malloc则不行
  5. new分配内存更直接和安全
  6. new会抛异常,malloc则会返回NULL

12、指针和引用的区别 

空值:指针可为空,引用必须指向有效对象
初始化:指针使用前可未初始化,但引用必须初始化
可变性:指针可重新指向不同的对象,引用一旦绑定则不可变
类型检查:指针类型相对宽松,引用类型严格
内存占用:指针占用固定大小内存,引用不额外占用
多级:指针可多级,引用只能一级

引用的底层还是用的指针,所以引用也是会占内存的 

13、内存泄漏 

简单地说就是申请了一块内存空间,使用完毕后没有释放掉。
(1)new和malloc申请资源使用后,没有用delete和free释放
(2)子类继承父类,父类析构函数不是虚函数
(3)Windows句柄资源使用后没有释放

内存泄漏检测
①良好的编码习惯,使用了内存分配的函数,一旦使用完毕,要记得使用其相应的函数释放掉
②将分配的内存的指针以链表的形式自行管理,使用完毕之后从链表中删除,程序结束可检查该链表
③使用智能指针
④使用一些工具,如ccmalloc、Dmalloc、Leaky、Valgrind等等。 

14、热重载 

允许开发人员在不重启应用程序的情况下动态地加载、更新或替换代码的技术 

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

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

相关文章

vscode c++和cuda开发环境配置

文章目录 1. vscode 插件安装2. 开发环境配置2.1 bear 安装2.2 代码的编译2.2.1 编写Makefile文件2.2.2 bear make和make命令2.3 debug环境配置2.1 函数跳转设置2.1.1 ` c_cpp_properties.json` 设置2.1.2 settings.json设置2.2 调试环境配置2.2.1 tasks.json2.2.2 launch.json…

shell编程之条件语句(if)

目录 一、条件测试 1.1文件测试和整数测试 1.1.1 test命令 1.1.2 文件测试 1.2.3 整数值比较 1.2 字符串测试与逻辑测试 1.2.1 字符串比较 1.2.2 逻辑测试 二、if语句 2.1 if单分支语句 2.2 if双分支语句 2.3 if多分支语句 三、case分支语句 一、条件测试 1.1文件…

微信小程序背景图无法显示

文章目录 不知道有没有人跟我一样,刚接触微信小程序,在写代码的时候,背景图莫名奇妙不显示。 网上有很多解决方法,比如转 base64 ,网络图片地址等等,但我觉得都太麻烦了,这里直接给出我的解决方…

新生在线分班查询,用这个小程序制作仅需一分钟!

今天许多学校已陆续开学,老师们又开始忙碌起来。他们需要将新生的分班信息逐一通知给每位家长,这不仅是一项繁琐的工作,而且效率也不高。传统的方法是通过电话、短信或邮件一一通知,这不仅耗时耗力,还容易出现信息传递…

《大道平渊》· 拾玖 —— 做产品的四大境界

《大道平渊》 【顶级】虚空造物, 无中生有。 【上等】带脑子抄, 模仿, 改进, 超越。 【中等】无脑抄, 一模一样, 疯狂内卷。 【下等】抄都能抄错, 蠢货。 // 题外话:呵呵,很多人照着抄都能抄错,给了模板不会用,项目拆解出来嚼…

React中实现antd自定义图标,鼠标悬浮变色

借助 antd 的 tooltip 组件来实现 hover 时变色的效果 1.新建组件 自定义图标一般在iconfont上面获取,复制下来的svg代码,切记要删除 fill 属性后添加到组件中 import { Tooltip } from "antd"; import React from "react";const …

springboot篇

文章目录 1.题目问答2.配置详情2.1配置文件2.2多环境配置2.3自定义参数2.4命令行参数2.5加载顺序 3.Starter POMs4.监控与管理—actuator4.1. 应用配置类4.1.1./autoconfg4.1.2. /beans4.1.3. /configprops4.1.4 /env4.1.5./mappings4.1.6./info 4.2. 度量指标类4.2.1. /metric…

oceanbase 常用视图查询记录

测试环境:1-1-1 OceanBase 企业版3.2.4.4 查看租户的 Context 和 Modudle 内存 SELECT tenant_id, svr_ip, ctx_id, ctx_name, mod_name, count, round(HOLD / 1024 / 1024, 2) hold_mb, round(used / 1024 / 1024, 2) used_mb FROM oceanbase.__all_virtual_memory…

AI问答:.NET核心组成概要、程序运行步骤和查询SDK版本的方法

.NET三大组成 ①Runtime (运行时): CLR:公共语言运行时,执行程序、内存管理、垃圾回收(GC)、安全性检查、异常处理,是跨平台的关键要素。 JIT:实时编译器,将中间语言…

Java性能优化传奇之旅--Java万亿级性能优化之Java 性能优化传奇:热门技术点亮高效之路

💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的博客,正是这样一个温暖美好的所在。在这里,你们不仅能够收获既富有趣味又极为实…

持续集成与持续部署(CI/CD)的深入探讨

在现代软件开发中,持续集成(CI)和持续部署(CD)已成为不可或缺的实践。这些方法旨在加快软件交付的速度,同时提高软件的质量和稳定性。通过CI/CD,开发团队可以频繁地将代码更改集成到主分支&…

Windows 下载安装RabbitMQ

环境描述 windows10 Erlang 26.2.x 版本 RabbitMQ 3.13.7 因为RabbitMQ是Erlang语言开发的,所以必须安装 Erlang RabbitMQ官网链接: https://www.rabbitmq.com/docs/which-erlang 1.下载并安装Erlang 26.2.5 1.1下载Erlang 26.2.5 https://erlang.org/dow…

谁便宜就选谁---基于成本的优化

什么是成本 我们之前老说MySQL执行一个查询可以有不同的执行方案,它会选择其中成本最低,或者说代价最低的那种方案去真正的执行查询。不过我们之前对成本的描述是非常模糊的,其实在MySQL中一条查询语句的执行成本是由下面这两个方面组成的&a…

数据结构:(LeetCode101)对称二叉树

给你一个二叉树的根节点 root , 检查它是否轴对称。 示例 1: 输入:root [1,2,2,3,4,4,3] 输出:true示例 2: 输入:root [1,2,2,null,3,null,3] 输出:false提示: 树中节点数目在范围…

基于分布式计算的电商系统设计与实现【系统设计、模型预测、大屏设计、海量数据、Hadoop集群】

文章目录 有需要本项目的代码或文档以及全部资源,或者部署调试可以私信博主项目展示项目介绍 目录摘要Abstract1 引言1.1 研究背景1.2 国内外研究现状1.3 研究目的1.4 研究意义 2 关键技术理论介绍2.1 Hadoop相关组件介绍2.2 分布式集群介绍2.3 Pyecharts介绍2.4 Fl…

真北老王 8 月小结:是战士,是爱人

2024年进度条:■■■■■■■■□□□□ 跑步: 八月暑假带娃,只跑了 83 公里。首次一个人的半马 2 小时 45 分。五公里突破 31 分钟。实践跑步、徒手健身、爬楼梯、跳绳混合运动。报了顺德半马,等抽签。 读书: glenwan…

网络基础:理解IP地址、默认网关与网段(IP地址是什么,默认网关是什么,网段是什么,IP地址、默认网关与网段)

前言 在计算机网络中,IP地址、默认网关和网段(也称为子网)之间有着密切的关系。它们是网络通信中的至关重要的概念,但它们并不相同。这里来介绍一下它们之间的关系,简单记录一下 一. IP地址 1. 介绍 IP 地址&#xf…

抽奖项目技术亮点

活动是通过秒杀领取的。(即:活动对应着某一商品) 这里超卖指:对于一个活动它的参与量有数量限制,就是活动的库存,当活动的领取数大于活动库存总量,就是超卖 用户秒杀参与活动的资格(…

ubuntu通过smba访问华为设备

文章目录 ubuntu通过smba访问华为设备华为设备设置ubuntu设置访问测试 ubuntu通过smba访问华为设备 华为设备设置 华为设备在华为分享一栏下有共享至电脑的选项,打开即可,这里会创建用户名和密码进入设置 -> 关于手机/平板电脑 -> 状态信息&…

HCS-网络服务

一、华为云Stack网络服务概览 1.网络服务包括:虚拟私有云、弹性负载均衡、弹性IP、网络ACL、虚拟专用网络、云专线、VPC终端节点、云解析 2.华为云Stack网络服务全景图: 二、云上通用网络服务 1.虚拟私有云 虚拟私有云(Virtual Private Clo…