C++八股学习心得.6

1.C++ 异常处理

异常是程序在执行期间产生的问题。C++ 异常是指在程序运行时发生的特殊情况

异常提供了一种转移程序控制权的方式。C++ 异常处理涉及到三个关键字:try、catch、throw

  • throw: 当问题出现时,程序会抛出一个异常。这是通过使用 throw 关键字来完成的。
  • catch: 在您想要处理问题的地方,通过异常处理程序捕获异常。catch 关键字用于捕获异常。
  • try: try 块中的代码标识将被激活的特定异常。它后面通常跟着一个或多个 catch 块。

2.C++ 动态内存 

C++ 程序中的内存分为两个部分:

  • 栈:在函数内部声明的所有变量都将占用栈内存
  • 堆:这是程序中未使用的内存,在程序运行时可用于动态分配内存

您无法提前预知需要多少内存来存储某个定义变量中的特定信息,所需内存的大小需要在运行时才能确定在 C++ 中,您可以使用特殊的运算符为给定类型的变量在运行时分配堆内的内存,这会返回所分配的空间地址。这种运算符即 new 运算符

如果您不需要动态分配内存,可以使用 delete 运算符,删除之前由 new 运算符分配的内存。

malloc() 函数在 C 语言中就出现了,在 C++ 中仍然存在,但建议尽量不要使用 malloc() 函数。new 与 malloc() 函数相比,其主要的优点是,new 不只是分配了内存,它还创建了对象

在任何时候,当您觉得某个已经动态分配内存的变量不再需要使用时,您可以使用 delete 操作符释放它所占用的内存

3.C++ 命名空间

引入了命名空间这个概念,专门用于解决上面的问题,它可作为附加信息来区分不同库中相同名称的函数、类、变量等。使用了命名空间即定义了上下文。本质上,命名空间就是定义了一个范围。

定义命名空间

命名空间的定义使用关键字 namespace,后跟命名空间的名称

using 指令

您可以使用 using namespace 指令,这样在使用命名空间时就可以不用在前面加上命名空间的名称。这个指令会告诉编译器,后续的代码将使用指定的命名空间中的名称。

4.C++ 模板

模板是泛型编程的基础泛型编程即以一种独立于任何特定类型的方式编写代码

模板是创建泛型类或函数的蓝图或公式库容器,比如迭代器和算法,都是泛型编程的例子,它们都使用了模板的概念

每个容器都有一个单一的定义,比如 向量,我们可以定义许多不同类型的向量,比如 vector <int> 或 vector <string>

您可以使用模板来定义函数和类

5.C++ 预处理器

预处理器是一些指令,指示编译器在实际编译之前所需完成的预处理

所有的预处理器指令都是以井号(#)开头只有空格字符可以出现在预处理指令之前预处理指令不是 C++ 语句,所以它们不会以分号(;)结尾

#define 预处理

#define 预处理指令用于创建符号常量。该符号常量通常称为

函数宏

您可以使用 #define 来定义一个带有参数的宏

条件编译

几个指令可以用来有选择地对部分程序源代码进行编译。这个过程被称为条件编译。

条件预处理器的结构与 if 选择结构很像。

# 和 ## 运算符

# 和 ## 预处理运算符在 C++ 和 ANSI/ISO C 中都是可用的# 运算符会把 replacement-text 令牌转换为用引号引起来的字符串

6.C++信号处理

signal() 函数

C++ 信号处理库提供了 signal 函数,用来捕获突发事件

raise() 函数

您可以使用函数 raise() 生成信号,该函数带有一个整数信号编号作为参数

 7.C++ 多线程

多线程是多任务处理的一种特殊形式,多任务处理允许让电脑同时运行两个或两个以上的程序。在一般情况下,有两种类型的多任务处理:基于进程和基于线程

基于进程的多任务处理处理的是程序的并发执行。基于线程的多任务处理的是同一程序的片段的并发执行。

C++ 不包含多线程应用程序的任何内置支持。相反,它完全依赖于操作系统来提供此功能。

创建线程

有下面的例程,我们可以用它来创建一个 POSIX 线程:

#include <pthread.h>

pthread_create (thread, attr, start_routine, arg)

pthread_create 创建一个新的线程,并让它可执行。这个例程可在代码内的任何地方被调用任意次数。

一个进程可以创建的最大线程数是依赖于实现的线程一旦被创建,就是同等的,而且可以创建其他线程。线程之间没有隐含层次或依赖。

终止线程

有下面的例程,我们可以用它来终止一个 POSIX 线程:

#include <pthread.h>

pthread_exit (status)

pthread_exit 用于显式地退出一个线程。通常情况下,pthread_exit() 例程是在线程完成工作后无需继续存在时被调用

如果 main() 是在它所创建的线程之前结束,并通过 pthread_exit() 退出,那么其他线程将继续执行。否则,它们将在 main() 结束时自动被终止。

连接和分离线程

有以下两个例程,我们可以用它们来连接或分离线程:

pthread_join (threadid, status)

pthread_detach (threadid)

pthread_join() 子例程阻碍调用例程,直到指定的 threadid 线程终止为止。当创建一个线程时,它的某个属性会定义它是否是可连接的(joinable)或可分离的detached)只有创建时定义为可连接的线程才可以被连接。如果线程创建时被定义为可分离的,则它永远也不能被连接

8.什么是 CGI? 

  • 公共网关接口(CGI),是一套标准,定义了信息是如何在 Web 服务器和客户端脚本之间进行交换的。
  • CGI 规范目前是由 NCSA 维护的,NCSA 定义 CGI 如下:
  • 公共网关接口(CGI)是一种用于外部网关程序与信息服务器(如 HTTP 服务器)对接的接口标准。
  • 目前的版本是 CGI/1.1,CGI/1.2 版本正在推进中。

 9.GET 和 POST 方法

当您需要从浏览器传递一些信息到 Web 服务器,最后再传到 CGI 程序。通常浏览器会使用两种方法把这个信息传到 Web 服务器,分别是 GET 和 POST 方法

使用 GET 方法传递信息

GET 方法发送已编码的用户信息追加到页面请求中页面和已编码信息通过 ? 字符分隔开

GET 方法是默认的从浏览器向 Web 服务器传信息的方法它会在浏览器的地址栏中生成一串很长的字符串当您向服务器传密码或其他一些敏感信息时,不要使用 GET 方法GET 方法有大小限制,在一个请求字符串中最多可以传 1024 个字符

当使用 GET 方法时,是使用 QUERY_STRING http 头来传递信息,在 CGI 程序中可使用 QUERY_STRING 环境变量来访问。

您可以通过在 URL 后跟上简单连接的键值对,也可以通过使用 HTML <FORM> 标签的 GET 方法来传信息。

简单的表单实例:GET 方法

下面是一个简单的实例,使用 HTML 表单和提交按钮传递两个值。我们将使用相同的 CGI 脚本 cpp_get.cgi 来处理输入。

<form action="/cgi-bin/cpp_get.cgi" method="get">

名:<input type="text" name="first_name">  <br />

 

姓:<input type="text" name="last_name" /><input type="submit" value="提交" /></form>

使用 POST 方法传递信息

一个更可靠的向 CGI 程序传递信息的方法是 POST 方法。这种方法打包信息的方式与 GET 方法相同,不同的是,它不是把信息以文本字符串形式放在 URL 中的 ? 之后进行传递,而是把它以单独的消息形式进行传递该消息是以标准输入的形式传给 CGI 脚本的。

10.向 CGI 程序传递各种数据数据 

向 CGI 程序传递单选按钮数据

当只需要选择一个选项时,我们使用单选按钮

下面的 HTML 代码实例是一个带有两个单选按钮的表单:

<form action="/cgi-bin/cpp_radiobutton.cgi"

         method="post"

         target="_blank">

<input type="radio" name="subject" value="maths"

                                    checked="checked"/> 数学

<input type="radio" name="subject" value="physics" /> 物理

<input type="submit" value="选择学科" />

</form>

向 CGI 程序传递文本区域数据

当需要向 CGI 程序传递多行文本时,我们使用 TEXTAREA 元素

下面的 HTML 代码实例是一个带有 TEXTAREA 框的表单:

<form action="/cgi-bin/cpp_textarea.cgi"

         method="post"

         target="_blank">

<textarea name="textcontent" cols="40" rows="4">

请在这里输入文本...

</textarea>

<input type="submit" value="提交" />

</form>

向 CGI 程序传递下拉框数据

当有多个选项可用,但只能选择一个或两个选项时,我们使用下拉框

下面的 HTML 代码实例是一个带有下拉框的表单:

<form action="/cgi-bin/cpp_dropdown.cgi"

                       method="post" target="_blank">

<select name="dropdown">

<option value="Maths" selected>数学</option>

<option value="Physics">物理</option>

</select>

<input type="submit" value="提交"/>

</form>

总结: 

异常处理:注意try(抛出异常),throw(),catch(捕获异常)

函数内部声明的额变量放在栈中,堆是运行的时候动态分配的内存,new出来一块内存记得使用之后释放delete,malloc函数是c语言的,记住要delete掉

命名空间关键字namespace,using namespace

模板是范式编程,特定的编码格式,库,迭代器,算法都用的是模版,我们可以定义许多不同类型的向量

预处理是实际编译之前需要完成的预处理,#开头,不是c++语句,不会;结尾,#define符号常量,宏,

c++信号处理:要注意SIGABRT信号的含义,signal函数是用来捕获突发事件,raise函数来生成信号

多线程:线程和进程的区别,线程创建函数pthread_create(),pthread_exit()函数退出线程,pthread_join()连接线程,pthread_detach()函数分离线程

了解CGI(公共网关接口)

get和post方法浏览器信息传给服务器,get方法有大小限制,1024字符,明文传输,get是把信息以文本字符串形式放在 URL 中的 ? 之后进行传递,post以单独的消息形式进行传递

我们要知道向网关传入各种数据做如何分辨

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

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

相关文章

【数据库】视图索引执行计划多表查询面试题

文章目录 一、视图1.1 概念1.2 视图与数据表的区别1.3 优点1.4 语法1.5 实例 二、索引2.1 什么是索引2.2.为什么要使用索引2.3 优缺点2.4 何时不使用索引2.5 索引何时失效2.6 索引分类2.6.1.普通索引2.6.2.唯一索引2.6.3.主键索引2.6.4.组合索引2.6.5.全文索引 三、执行计划3.1…

@RequestParam,@RequestBody和@PathVariable 区别

RequestParam&#xff0c;RequestBody和PathVariable 这三者是spring常见的接受前端数据的注解&#xff0c;那么他们分别是接受什么的前端数据呢&#xff1f; RequestParam&#xff1a;这个注解主要用于处理请求参数&#xff0c;尤其是GET请求中的查询参数和表单参数。它可以用…

群晖NAS+DMS7.0以上版本+无docker机型安装zerotier

测试机型&#xff1a;群晖synology 218play / DSM版本为7.2.1 因218play无法安装docker&#xff0c;且NAS系统已升级为7.0以上版本&#xff0c;按zerotier官网说法无法安装zerotier, 不过还是可以通过ssh终端和命令方式安装zerotier。 1、在DSM新建文件夹 用于存放zerotier脚…

Java 动态代理是什么? 怎么实现动态代理?

Java 动态代理是什么? 怎么实现动态代理&#xff1f; Java 动态代理是一种在运行时创建代理类和实例的机制&#xff0c;它允许在调用实际方法之前或之后插入自定义的逻辑。动态代理是通过 Java 反射机制实现的&#xff0c;主要利用 java.lang.reflect.Proxy 类和 InvocationH…

HUAWEI WATCH 系列 eSIM 全新开通指南来了

HUAWEI WATCH 系列手表提供了eSIM硬件能力&#xff0c;致力为用户提供更便捷、高效的通信体验。但eSIM 业务是由运营商管理并提供服务的&#xff0c;当前运营商eSIM业务集中全面恢复&#xff0c;电信已经全面恢复&#xff0c;移动大部分省份已经全面放开和多号App开通方式&…

【MATLAB】数豆子

Matlab数豆子 创建一个变量来表示豆子的数量。例如&#xff0c;可以使用豆子数量 100;来表示有100颗豆子。 使用disp函数打印出豆子的数量。例如&#xff0c;可以使用disp([目前有 num2str(豆子数量) 颗豆子])来打印出当前豆子的数量。 进行豆子的计数操作。例如&#xff0c…

RFID标签在汽车监管方面的应用与实施方案

RFID技术在汽车工业领域得到了广泛应用&#xff0c;主要体现在汽车资质证书远程监管系统的普及化&#xff0c;系统包括OBD接口监视器、车证监管箱、超高频读写设备、应用系统软件以及大数据采集与处理等组成部分。 在汽车物流监管方面&#xff0c;系统利用OBD接口监控车辆并实时…

关键字:super关键字

在 Java 中&#xff0c;super 关键字主要有以下两种用法&#xff1a; 在子类中调用父类的构造方法&#xff1a;当创建子类对象时&#xff0c;可以使用 super 关键字来显式调用父类的构造方法。这可以用于初始化父类的成员变量或执行父类的其他初始化操作。下面是一个示例代码&…

Midjourney词库

光线与影子篇 闪耀的霓虹灯 shimmeringneon lights 黑暗中的影子 shadows in the dark 照亮城市的月光 moonlightilluminatingthe city 强烈的阳光 strong sunlight 熠熠生辉的霓虹灯 glittering neon lights 黑暗中的神秘影子 mysterious shadows in the dark 照亮城市…

Linux常用命令大全<二>

linux命令系列 Linux常用命令大全&#xff1c;一&#xff1e; Linux常用命令大全<二> 文章目录 操作系统相关unameetc/os-releasehostnamedmesguptimeulimitinitvmstatiostat 进程与服务service&#xff0c;使用systemctl代替apt-get installyum 网络ipcsipcrmroutepingt…

需方管理运维运营服务的心得

在确保供应商提供的运营维护服务达到需方质量标准&#xff0c;并保障供应商具备相应的服务条件与能力方面&#xff0c;需方必须采纳一整套综合性的管理措施。这包括但不限于方法论、技术工具、制度化流程、以及完备的文档记录等。以下是一份精炼的方案&#xff0c;涉及至关重要…

el-form点击提交后把验证失败的数据传给了后端

问题&#xff1a;版本号需要根据后端返回的结果查看是否可用&#xff0c;在这里1.0.0是不可用的&#xff0c;如果点击其他地方则会报红&#xff0c;可是直接点击提交&#xff0c;则会把1.0.0这个错误的数据也提交给后端。 解决方案&#xff1a; html代码&#xff1a; <el…

C#-词法结构

程序 C# 程序 (program) 由一个或多个源文件 (source file) 组成,源文件的正式名称是编译单元 (compilation unit)。源文件是有序的 Unicode 字符序列。 源文件与文件系统中的文件通常具有一对一的对应关系,但这种对应关系不是必需的。为实现可移植性的最大化,建议这些文件…

【ARM 处理器】程序存储详解

本篇文章主要介绍ARM处理器&#xff0c;Code, RO-data,RW-data,ZI-data 知识以及程序存储情况 目录 1. 专业词汇2. 程序存储3. 程序空间计算 1. 专业词汇 Code &#xff1a; 代码区&#xff0c;存储在 ROM 区域RO-data&#xff1a;Read Only data&#xff0c;即只读数据域&…

利用Podman构建基于Fission env/builder的镜像

镜像准备 构建Dockerfile fission的基础环境包括两种&#xff1a;env 以及 builder。如果仅基于code构建function&#xff08;i.e., 只创建deployachive&#xff09;&#xff0c;仅构建env即可&#xff1b;但如果需要构建sourcearchive&#xff0c;则需要同时创建env和builde…

修改对象的行为和值(代理)

文章目录 前言一、复制一个对象二、代理对象重点来了 总结 前言 最近遇到一个需求,需要在某个位置,统一处理对象的一些属性值&#xff1a; 方案有两种: 直接复制一份,将属性覆盖后,返回一个新对象搞一个代理类,代理这个对象,修改对象的原有行为和值,从而达到修改属性值的目的…

Guava:Throwables 异常工具

Guava Throwables 类 Throwable 类&#xff0c;简化异常和错误的传播与检查 类方法说明 官方文档&#xff1a;Throwables (Guava: Google Core Libraries for Java 27.0.1-jre API) 方法类型方法描述static List<Throwable>getCausalChain(Throwable throwable) 获取…

概率论与数理统计 知识点+课后习题

文章目录 &#x1f496; [学习资源整合](https://www.cnblogs.com/duisheng/p/17872980.html)&#x1f4da; 总复习&#x1f4d9; 选择题&#x1f4d9; 填空题&#x1f4d9; 大题1. 概率2. 概率3. 概率4. P5. 概率6. 概率密度函数 F ( X ) F(X) F(X)7. 分布列求方差 V ( X ) …

[蓝桥杯学习] 树状数组的二分

要解决这个问题&#xff0c;插入和删除可以用STL实现&#xff0c;2操作如果用树状数组实现的话&#xff0c;将数的值作为树状数组的下标&#xff0c;即值域。 树状数组有两种操作&#xff0c;一个是更新某点的值&#xff0c;另一个是求区间和。 mid (lr)/2 &#xff0c;求和 …

spring boot + mysql+ mybatis-plus开箱即用项目

开箱即用后端项目 用于中小型项目快速构建web api&#xff0c;灵活度高&#xff0c;可根据项目自由定制所需的依赖插件&#xff0c;此项目区分了开发、测试、和生产环境 此项目集成了mysql mybatis-plus &#xff0c;使用mybatis-plus的自动填充功能实现通用字段的赋值&#x…