C++八股学习心得.6

news2025/7/19 22:35:13

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.coloradmin.cn/o/1361888.html

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

相关文章

给Flutter + FireBase 增加 badge 徽章,App启动器 通知红点。

在此之前需要配置好 firebase 在flutter 在项目中。&#xff08;已经配置好的可以忽略此提示&#xff09; Firebase 配置教程&#xff1a;flutter firebase 云消息通知教程 (android-安卓、ios-苹果)_flutter firebase_messaging ios环境配置-CSDN博客 由于firebase 提供的消息…

3D空间漫游技术的日趋成熟,让博物馆数字化大放异彩!

随着科技的飞速发展&#xff0c;互联网已经成为人们生活中不可或缺的一部分。在这个数字化时代&#xff0c;博物馆也紧跟时代潮流&#xff0c;将传统的实体博物馆与现代科技相结合&#xff0c;诞生了一种全新的博物馆形式——3D线上博物馆。这种新型博物馆凭借其独特的魅力&…

RT_Thread 调试笔记:串口打印、MSH控制台 相关

说明&#xff1a;记录日常使用 RT_Thread 开发时做的笔记。 持续更新中&#xff0c;欢迎收藏。 1.打印相关 1.打印宏定义&#xff0c;可以打印打印所在文件&#xff0c;函数&#xff0c;行数。 #define PRINT_TRACE() printf("-------%s:%s:%d------\r\n", __FIL…

宏电股份5G RedCap终端产品助力深圳极速先锋城市建设

12月26日&#xff0c;“全城全网&#xff0c;先锋物联”深圳移动5G-A RedCap助力深圳极速先锋城市创新发布会举行&#xff0c;宏电股份携一系列5G RedCap终端产品应邀参与创新发布会&#xff0c;来自全国5G生态圈的各界嘉宾、专家学者济济一堂&#xff0c;共探信息化数字化创新…

GitHub 一周热点汇总 第4期 (2024/01/01-01/06)

GitHub一周热点汇总第四期 (2023/12/24-12/30)&#xff0c;梳理每周热门的GitHub项目&#xff0c;了解热点技术趋势&#xff0c;掌握前沿科技方向&#xff0c;发掘更多商机。2024年到了&#xff0c;希望所有的朋友们都能万事顺遂。 说明一下&#xff0c;有时候本周的热点项目会…

蟹目标检测数据集VOC格式400张

蟹&#xff0c;一种独特的海洋生物&#xff0c;以其强壮的身体和独特的生活习性而闻名。 蟹的身体宽厚&#xff0c;有一对锐利的大钳子&#xff0c;这使得它们在寻找食物和保护自己时非常有力。蟹的外观颜色多样&#xff0c;有绿色、蓝色、棕色和红色等&#xff0c;这使得它们在…

软件工程概论------文件管理

目录 1.文件的相关概念 2.文件目录 3.位示图 4.索引文件 5.例题 1.文件的相关概念 文件:具有符号名的、在逻辑上具有完整意义的一组相关信息项的集合。 逻辑结构:有结构的记录式文件、无结构的流式文件。 物理结构: 连续结构、链接结构、索引结构、多个物理块的索引表。 …

解决ChatGPT4.0无法上传文件

问题描述 ChatGPT4.0&#xff1a;上传文件时出错 解决方案&#xff1a; 仔细检查文件的编码格式&#xff0c;他似乎目前只能接受utf-8的编码&#xff0c;所以把文件的编码改为UTF-8即可成功上传

企业Aspera替代方案有哪些推荐

随着企业数据量的不断增加&#xff0c;数据传输和共享成为了一个重要的问题。Aspera是一款高性能、低延迟的数据传输工具&#xff0c;但是它并不是万能的&#xff0c;随着数据量的不断增大&#xff0c;也有一些企业需要寻找Aspera的替代方案。本文将介绍三种常用的企业Aspera替…

物联网的感知层、网络层与应用层分享

物联网的概念在很早以前就已经被提出&#xff0c;20世纪末期在美国召开的移动计算和网络国际会议就已经提出了物联网(Internet of Things)这个概念。 最先提出这个概念的是MIT Auto-ID中心的Ashton教授&#xff0c;他在研究RFID技术时&#xff0c;便提出了结合物品编码、互联网…

如何在群晖7.2中运行WPS Office镜像容器并使用固定地址公网访问

文章目录 1. 拉取WPS Office镜像2. 运行WPS Office镜像容器3. 本地访问WPS Office4. 群晖安装Cpolar5. 配置WPS Office远程地址6. 远程访问WPS Office小结 7. 固定公网地址 wps-office是一个在Linux服务器上部署WPS Office的镜像。它基于WPS Office的Linux版本&#xff0c;通过…

AI硬件2——SIPEED MaixCube(Kendryte K210)基础使用

系列文章目录 官方网站 开发文档 文章目录 系列文章目录前言一、特点介绍1、MaixPy2、KPU3、MaixPy IDE4、kmodel 二、环境准备1、USB 驱动安装1&#xff09;Linux2&#xff09;Windows 2、更新固件3、串口工具1&#xff09;连接硬件2&#xff09;Windows串口工具3&#xff09…

「优质Verilog刷题网站推荐」HDLBits

目前 集成电路领域算是风口行业之一 因此需要大量的芯片设计人才 而数字集成电路是其中的前端部分 设计数字集成电路所使用的主流语言是Verilog 然而 不像传统的编程语言C Java Python等有大量的刷题网站如力扣、牛客网等 支持Verilog刷题的网站不算很多 优质的就更少了 牛客网…

精选顶级期刊中的三幅可复现图表

简介 最近在阅读文献时&#xff0c;发现了一些出色的可视化案例&#xff0c;特此与大家分享。这些图共同的特点是&#xff1a;1. 易懂明晰&#xff1b; 2. 信息丰富&#xff1b; 3. 配色优雅。 小编有话说&#xff1a;以下三幅图选自领域内顶级期刊&#xff0c;虽然并非采用R语…

【ChatGPT】提示设计的艺术:使用清晰的语法

探索清晰的语法如何使您能够将意图传达给语言模型&#xff0c;并帮助确保输出易于解析 All images were generated by Scott and Marco. 这是与Marco Tulio Ribeiro共同撰写的关于如何使用指导来控制大型语言模型&#xff08;LLM&#xff09;的系列文章的第一部分。我们将从基…

快速了解云计算与云原生

快速了解云计算与云原生 云计算云原生DevOps容器持续交付微服务 云计算 在讲云原生之前&#xff0c;先来讲讲云计算 其中云原生属于技术架构理念&#xff0c;而云计算提供应用所需的基础资源&#xff0c;云计算是云原生的基础&#xff0c;两者是相辅相成的 云计算简单来说&a…

2024--Django平台开发-Web框架和Django基础(二)

day02 Web框架和Django基础 今日概要&#xff1a; 网络底层引入&#xff0c;到底什么是web框架&#xff1f;常见web框架对比django快速上手&#xff08;创建网站&#xff09;常见操作&#xff1a;虚拟环境、django项目、多app应用、纯净版逐点剖析&#xff1a;路由、视图、模…

SpringBoot基于Redis(7.2)分片集群实现读写分离

文章目录 一、前置提要二、集群搭建三、SpringBoot访问分片集群 一、前置提要 SpringBoot访问Redis分片集群和Redis哨兵模式&#xff0c;使用上没有什么区别。唯一的区别在于application.yml配置上不一样。 二、集群搭建 首先&#xff0c;无论如何&#xff0c;得先有一个Red…

零配置,零麻烦:MapStruct 的轻松对象映射之旅

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 零配置&#xff0c;零麻烦&#xff1a;MapStruct 的轻松对象映射之旅 前言MapStruct是什么快速上手&#xff1a;基础映射高级映射技巧1. 针对复杂类型的映射&#xff1a;2. 自定义映射逻辑&#xff1a…

【Sublime Text】| 01——下载安装注册

系列文章目录 【Sublime Text】| 01——下载软件安装并注册 【Sublime Text】| 02——常用插件安装及配置 失败了也挺可爱&#xff0c;成功了就超帅。 文章目录 前言1. 下载2. 安装3. 注册3.1 通过修改应用程序注册3.2 通过替换应用程序注册 感谢 前言 轻量代码编辑器有很多 之…