深蓝学院C++基础笔记 第 0 章 C++介绍

news2025/1/10 3:29:52

一、什么是C++

1、c++ 是一门比较流行的编程语言
\qquad ●https://www.tiobe.com/tiobe-index/编程语言排行榜2、c++是C 语言的扩展

● 更加关注性能
\qquad ● 与底层硬件紧密结合
\qquad \qquad java和python等语相对来说更加关注易用性。
\qquad ● 对象生命周期的精确控制
\qquad \qquad C#用完即弃,更易用
\qquad \qquad 及时释放空间,避免额外开销
\qquad ● Zero-overhead Abstraction
\qquad \qquad 无需为没有使用的语言特性付出成本
\qquad \qquad 使用了语言特性不等于付出成本,部分成本在编译器付出,运行期就会很快

 new在堆上开辟空间,常量在栈上。

● 引入大量特性,便于工程实践
\qquad ● 三种编程范式:面向过程、面向对象、泛型
\qquad ● 函数重载、异常处理、引用
3、 一系列不断衍进的标准集合

  • C++98/03 , C++11 , C++14 , C++17 , C++20
  • 语言本身的改进
  • 标准库的改进
    4、 C++ 标准的工业界实现
    编译器:
    windows: MSVC
    Linux: GCC / Clang

每个编译器可能并不完全遵照标准;不同的实现存在差异

总结:
不能脱离语境讨论C++
编写时要注重:
\qquad - 性能
\qquad - 标准

二、C++的开发环境和工具

  • VisualC++/GCC(G++)/Clang(Clang++)…
  • 集成开发环境:Visual Studio/CodeLite/Code::blocks/Eclipse…
  • 工具
    /usr/bin/time
    valgrind -内存泄漏之类查询
    cpp reference 【网站】
    Compiler explorer 【网站】
    C++insights
    cppcon:c++会议,可以在youtube看

编译工具:g++

三、c++的编译连接模型

  • 简单的加工模型- 在这里插入图片描述
  • 问题:无法处理大型程序
    加工耗时较长
    即使少量修改,也需要全部重新加工
  • 解决方案:分块处理- 在这里插入图片描述
  • 好处
    编译耗资源但一次处理输入较少
    链接输入较多但处理速度较快
    便于程序修改升级
  • 由“分块处理”衍生出的概念
    定义/声明
    头文件/源文件
    翻译单元
    ·源文件 +相关头文件(直接/间接)—应忽略的预处理语句
  • 一处定义原则:
    · 程序级:一般函数
    · 翻译单元级:内连函数、类、模板

c++的编译连接模型

预处理 -> 编译 -> 链接 -> 执行

预处理:-E 获取main.i

  • 将源文件转换为翻译单元
  • 头文件不应互相包含,防止头文件循环展开:
  • #ifdef
  • #pragma once
    在这里插入图片描述
    -S:生成啊相应的汇编代码
    在这里插入图片描述
    完整版:
    在这里插入图片描述
    编译
  • 将翻译单元转换为相应的汇编语言表示
  • 编译优化
    -O0
    debug:引入优化少【开发】
    release:引入优化多 【最后编译使用】

源文件变化只编译源文件,头文件变化需要全部重新编
增量编译和全部编译

汇编:

链接: 合并多个目标文件,关联声明与定义

  • 连接(Linkage)种类:内部连接、外部连接、无连接
  • 链接常见错误:找不到定义
    C++的编译/链接过程是复杂的,预处理、编译与链接都可能出错
    编译可能产生警告、错误,都要重视

.o:目标文件

三、小结

  • C++是一门注重性能的程序设计语言
  • C++的标准经历类一系列的衍化,还在不断发展
  • 标准与具体实现之间存在差距
  • C++源程序转换成可执行文件是相对复杂的过程,主要包含预处理、编译、链接等阶段,每一阶段都可能引入错误

在这里插入图片描述

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

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

相关文章

冒泡排序小练习(接收键盘录入、拆分、转整、冒泡递减排序、输出)

接收键盘录入(含输入字符串排错)字符串,拆分、转整、冒泡排序(递减)输出。 【学习的细节是欢悦的历程】 Python 官网:https://www.python.org/ Free:大咖免费“圣经”教程《 python 完全自学教程》,不仅仅是基础那么简单…… 地址…

unity3d 中场景不显示了

应该是把Layers下面的Nothing打开了

Java学习路线(18)——File、递归、字符集和IO流(上)

一、文件 (1)概述 File类在java.io.File下,代表操作系统的文件对象(文件、文件夹)File类提供诸如:定位文件,获取文件信息,删除文件,创建文件等操作 (2&…

大数据Doris(三十):Broker Load导入HDFS数据时进行数据过滤

文章目录 Broker Load导入HDFS数据时进行数据过滤 一、创建Doris表 二、准备HDFS数据

使用Axios前后端交互(超详细)建议点赞收藏

1、安装axios 将目录切换到当前项目目录下,执行下面安装命令: npm install --save axios vue-axios 2、将axios挂载到vue实例上或则直接导入组件中 在mian.js中做如下配置,可将axios挂载到vue实例上: import axios from axios…

HNU-电子测试平台与工具2-基于485总线的评分系统

基于485总线的评分系统实验报告 计科210X wolf 202108010XXX 同组成员:wolf、DragonKing、Eliak 验收分数:90 1 实验项目 1.1 项目名称 基于485总线的评分系统 1.2 实验目的 通过本案例加深理解RS485通信方式,实现上位机的主控制器与所有的下位机进行通信。 1.3 实…

高完整性系统:Invariants

目录 1. INVARIANTS 1.1 例子 1.2 正式的证明 1. INVARIANTS 一个不变式需要满足以下三个属性: 当循环开始时,不变式是正确的在每一次循环迭代之后,不变式仍然是正确的当循环条件为假时,不变式能推出循环结束后的条件&#x…

逻辑漏洞学习-身份验证漏洞

逻辑漏洞就是程序在实现业务逻辑上存在的错误,辑漏洞的出现通常是因为程序在设计业务逻辑时考虑不够全面,或者程序员的思维过程存在瑕疵,没有充分考虑到各种可能的情况 大部分程序员在设计的时候,目标是实现功能需求,…

华为OD机试真题B卷 Java 实现【计算数组中心位置】,附详细解题思路

一、题目描述 给你一个整数数组 nums,请计算数组的中心位置,数组的中心位置是数组的一个下标,其左侧所有元素相乘的积等于右侧所有元素相的积。 数组第一个元素的左侧积为 1,最后一个元素的右侧积为 1。如果数组有多个中心位置&…

pytest:灵活替换用例中的变量

背景: 这几天在调试之前搭建的pytest框架时,发现原框架对case中的变量进行动态替换的代码不够完美,原代码逻辑会造成代码中会出现大量的if语句,让代码量增加不少,并且后期维护也不方便:case只要新增了一个…

vue3 实现全选/全不选功能

List item vue3实现全选/全不选功能 实现逻辑就是全选按钮的选中与否依赖,所有的子复选框是否选中, 通过计算属性的 get()跟set()方法绑定 全选按钮的值. <template><div class"container"><input type"checkbox" v-model"checkAll&qu…

面了个蚂蚁金服拿38K出来的,真是砂纸擦屁股,给我露了一手啊

今年的春招结束&#xff0c;很多小伙伴收获不错&#xff0c;拿到了心仪的 offer。 各大论坛和社区里也看见不少小伙伴慷慨地分享了常见的面试题和八股文&#xff0c;为此咱这里也统一做一次大整理和大归类&#xff0c;这也算是划重点了。 俗话说得好&#xff0c;他山之石&…

小狐狸ChatGPT付费创作系统1.9.7独立版 + H5端 + 小程序前端增加AI绘画+GPT4接口

小狐狸ChatGPT 1.9.7独立版经播播资源测试了版本比较&#xff0c;本版核心增加了GPT4.0接口功能&#xff0c;小程序端内置了AI绘画功能。体验下来问答速度感觉体验更好。小程序端有更新请对应开发工具更新上传&#xff0c;本版无开源端。播播资源提供的安装教程详见下方&#x…

网路安全技能竞赛——【Linux操作系统渗透提权】解析(超级详细)

Linux操作系统渗透提权 任务环境说明&#xff1a; 服务器场景&#xff1a;Server2202&#xff08;关闭链接&#xff09;用户名&#xff1a;hacker 密码&#xff1a;123456 使用渗透机对服务器信息收集&#xff0c;并将服务器中SSH服务端口号作为flag提交&#xff1b;…

【Redis】聊一下Redis的哨兵机制

在上一篇文章中&#xff0c;我们学习了数据库的Redis的主从集群复制模式&#xff0c;如果从库出现问题&#xff0c;那么其他主从库还可以处理读写请求&#xff0c;但是如果主库宕机&#xff0c;写请求从库处理不了&#xff0c;整个系统就不可用了&#xff0c;虽然只处理只读请求…

Windows提权:利用MSSQL数据库,Oracle数据库

目录 MSSQL提权&#xff1a;使用xp_cmdshell进行提权 MSSQL&#xff1a;使用sp_OACreate进行提权 MSSQL&#xff1a;使用沙盒提权 Oracle提权&#xff1a;工具一把梭哈 总结 MSSQL在Windows server类的操作系统上&#xff0c;默认具有system权限。 MSSQL提权&#xff1a;使…

三、浅谈机器人的底盘设计

两电机差速底盘 方式1&#xff1a;驱动轮在后&#xff0c;万向轮在前&#xff08;支撑轮也可以换成全向轮&#xff0c;目的只是撑地&#xff09;&#xff0c;在一般的巡线比赛中较常用。 该底盘的优点&#xff1a;运动灵活&#xff0c;组装简单 该底盘的缺点&#xff1a;车体…

如何增加音频音量,给大家分享两个免费方法!

相信许多音频剪辑新手在刚开始的阶段需要探索学习各种操作方法。其中&#xff0c;许多用户发现自己的音频文件音量太小&#xff0c;想要增加音量&#xff0c;但却不知道使用哪种工具更好&#xff0c;如何操作更为方便。为此&#xff0c;我为您整理了两种方法&#xff0c;并向新…

docker的基本相关知识和操作

镜像相关操作命令&#xff1a; 访问DockerHub搜索镜像&#xff0c;https://hub.docker.com/ 查看本地镜像&#xff1a;docker images 搜索镜像 docker search redis &#xff08;搜索redis&#xff09; 拉取镜像&#xff1a;docker pull redis &#xff08;默认版本&#x…

Slow-Fast使用教程2023.5.30

项目地址 https://github.com/facebookresearch/SlowFast 安装教程 首先参考官方安装必须的包并下载项目文件&#xff1a;https://github.com/facebookresearch/SlowFast/blob/main/INSTALL.md 安装注意&#xff1a; 最好使用Linux系统&#xff0c;如果是windows系统&#xf…