当前位置: 首页 > news >正文

C++学习记录:

        今天我们来学习一门新的语言,也是C语言最著名的一个分支语言:C++。

           在C++的学习中,我们主要学习的三大组成部分:语法、STL、数据结构。

        C++的介绍

        C++的历史可追溯至1979年,当时贝尔实验室的本贾尼·斯特劳斯特卢普博士在面对复杂软件开发任务、尤其是模拟和操作系统开发工作的时候发现了现有语言(如C语言)在表达能力、维护能力、拓展能力的不足。1983年本佳尼博士基于C语言添加了面向对象的编程的特性,也就是C++的雏形。

        C++的标准化工程从1989年开始,并成立了ANSI和ISO国际标准化组织的联合标准化委员会。1994年该委员会第一次提出C++的标准化草案。1997年联合标准委员会通过了该标准的最终草案,1998年C++的ANSI\ISO标准正式投入使用。

以下是C++不同版本

年份标准名称核心特性影响与意义
1985C++ 1.0类、继承、虚函数、运算符重载奠定C++面向对象基础,首个商业编译器发布
1989C++ 2.0多重继承、抽象类、静态成员函数扩展面向对象能力
1998C++98 (ISO/IEC 14882:1998)STL标准模板库、异常处理、RTTI、命名空间首个国际标准,成为工业级语言标杆
2003C++03 (ISO/IEC 14882:2003)修复C++98缺陷、值初始化语法改进过渡性修订版本,未引入重大特性
2011C++11 (ISO/IEC 14882:2011)auto、移动语义、Lambda、智能指针、constexpr、并发库现代C++革命性起点,大幅提升开发效率与安全性
2014C++14 (ISO/IEC 14882:2014)泛型Lambda、二进制字面量、constexpr函数增强对C++11的完善补充
2017C++17 (ISO/IEC 14882:2017)结构化绑定、std::filesystemif constexprstd::optional简化代码编写,强化编译期计算
2020C++20 (ISO/IEC 14882:2020)概念(Concepts)、协程(Coroutines)、模块(Modules)、范围库(Ranges)重大范式革新,提升泛型编程能力与工程化水平
2023C++23 (ISO/IEC 14882:2023*)标准库模块化、多维数组(mdspan)、格式化库(std::format)、网络库原型进一步优化工程实践,增强数学计算与I/O能力(*预计2023年底发布)

       编译器

        但是标准委员会只管理C++的特性,其实现依然要依赖编译器的实施,常用的编译器有三个:VS系列(微软开发)、g++(Linux系统上运行)、clang++(应用较少)。

        C++的参考文档

        https://legacy.cplusplus.com/reference/

        (非官方文档,标准也只到C++11,但是方便阅读)

        https://zh.cppreference.com/w/cpp

        https://en.cppreference.com/w/

        (官方文档,内容更新至最新版本,支持中英双语查看,但是不方便阅读查看。)

        C++的重要性

        TIOBE 编程社区指数是一个衡量编程语言受欢迎程度的指标,评判的依据来自世界范围内的工程师、课程、供应商及搜索引擎。以下是截止2025年4月编程语言排行榜

        

        python因为近来AI的高速发展而位列第一且上升速度较快。但是由以上图可以发现,C\C++仍然占大部分。尽管相较于JAVA,C++的生态环境开发比较慢(JAVA的网络库约半年更新一次)。

C++在工作领域的应用

        C++的应用领域主要在服务器端、游戏(引擎)、机器学习引擎、音视频处理、嵌入式软件、电信设备、金融应用、操作系统、编译器、基础架构、基础工具、硬件交互等很多方面。

1.大型软件开发:如编译器、数据库、操作系统、浏览器等等

2.音视频处理:主要技术栈就是C++

3. PC客户端开发:一般是Windows啊桌面软件。技术栈一般要学习C++和QT(QT是一种跨平台的C++图形界面程序)

4.服务端开发:高性能服务地区

5.嵌入式开发:

6.游戏引擎开发:

7.机器学习引擎开发:底层算法是C++,上层用python封装

8.测试开发:

C++学习书籍推荐

《C++primer》:主要讲解语法,很经典的语法书记。比较晦涩难懂。在拥有一定基础后可以当作语法字典。

《STL源码剖析》:从底层实现的角度深度结合STL,深度剖析STL源码的实现。建议有一定基础后学习观看。

《Effective C++》:关于这本书有一句评价:将程序员分为看过这本书的和没看过这本书的。这本书主要讲解了55个如何正确高效地使用C++的条款。建议有一定基础后或者在工作一两年后看。

请认准以下三本书的封面:

C++学习

首先我们来看一段标准的C++语法写的hello world:

C语言其实一定程度上也可以兼容(但是慎用!!!)  

        那为什么C++是这么个写法呢?接下来我们就来解析一下:

        命名空间

        相较于C++,C语言有命名冲突的问题。我们来上一段代码演示一下:

        

再上图代码中,打印出来的rand的值就是我们定义的10.

但是当我们将头文件<stdlib.h>包含在内的时候,就会发生如下报错:

namespace的定义

        1.定义命名空间,需要namespace关键字,后面跟变量的名字,接着一对{}即可,{}中为命名空间的成员。命名空间可以定义变量、类型、函数等。

        2.namespace 本质上是定义一个域,这个域跟全局域各自独立,不同的域定义同名变量。所以一下代码的rand不再冲突了

        3.C++中域有函数定义域、全局域、命名空间域、类域(定义域和全局域影响生命周期,命名空间域和类域不会 );域影响的是编译时语法查找一个变量/函数/类型出处(声明或定义),所以有了域隔离,名字冲突就解决了。局部域与全局域除了影响编译查找逻辑,还会影响变量的生命周期。命名空间和域类不影响变量生命周期

4.namespace只能定义在全局(当然也可以嵌套定义)

5.项目工程中多文件定义的同名namespace会认为是同一个namespace,不会冲突。

6.C++的标准库都放在一个叫std的(standard)的命名空间中。

命名空间的使用

        编译器查找一个变量的声明/定义时,默认只会在全局或者局部找,不会到命名空间去查找。所以我们要使用命名空间中的函数和变量,需要以下三种方式:

1.指定命名空间去访问(项目中推荐这种用法)

2.using将命名空间中的成员展开,项目中经常访问的不存在冲突的成员推荐用这种方式

3.展开命名空间中全部成员(项目中不推荐,因为风险很大,平时小练习为了方便可以用)

如图,以下两种方式等效。

第一种是指定命名方式访问。

,第二种方式就是展开命名空间。

接下来回归最开始的hello world程序

        

如果我们将展开命名空间std的代码注释掉,就会发生如下情况

        

在这种情况下如果我们想要打印,可以这样

如果多次应用cout变量,可以这样

C++的输入输出

1.<iostream>是Input Output Stream的缩写,是标准的输入输出流库,定义了输入输出的对象。

2.std::cin是istream类的对象,主要面对窄字符的标准输入流。

3.std::cout是ostream类的对象,主要面对窄字符的标准输出流。

4.std::endl是操作符,底层实现的一个函数,流插入输出时,相当于插入一个换行字符加刷新缓冲区。

5.<<是流插入运算符,>>是流提取运算符(C语言还用它来作为左移右移运算符)

6.使用C++的输入输出更加方便,不需要像printf函数和scanf函数,需要手动指定格式,C++的输入输出可以自动识别变量类型(本质是通过函数重载实现),最重要的是C++的流能更好的支持自定义类型的对象的输入输出。

例如:针对C++中的”类“类型, printf函数作为原生函数,没有对应的格式去打印它,但是C++可以。cin和cout的优势是可以输入输出任意类型。本质是为了支持任意类型输入输出。

7.IO类型涉及类和对象,运算符重载、继承等多方面面对对象的知识,后续学习可以认识。

8.cout/cin/endl都是属于C++标准库,C++标准库放在一个叫std(standard)的命名空间中,所以要通过命名空间的使用方式去使用它们

9.在vs中,我们只要包含了<iostream>头文件即使不包含<stdio.h>也可以使用printf函数和scanf函数,但是注意这种写法在其他编辑器上可能报错。

        缺省参数

        1.缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实参则采用该形参的缺省值,否则使用指定的实参,缺省参数分为全缺省和半缺省参数。(有些地方把缺省参数也叫默认参数)
        2.全缺省就是全部形参给缺省值,半缺省就是部分形参给缺省值。C++规定半缺省参数必须从右往左依次连续缺省,,不能间隔跳跃给缺省值。
        3.带缺省参数的函数调用,C++规定必须从左到右依次给实参,不能跳跃给实参。
        4.函数声明和定义分离时,缺省参数不能在函数声明和定义中同时出现,规定必须函数声照给缺省值

具体如下图所示

但是缺省参数不可以这样传参

同理也不可以只传递第三个参数不传递第一个和第二个。

今天的C++学习就到这里,感谢各位读者大大的观看,求一个赞,谢谢

        

        

相关文章:

  • 2025主流报表软件评测和推荐
  • 【DeepSeek答】如何成为一名科技领域陪同口译,阶段性学习目标是什么
  • FreeRTOS之消息队列
  • Spring Boot 应用程序中配置使用consul
  • 20250416在荣品的PRO-RK3566开发板的Android13下编译native C的应用程序的步骤
  • 免费使用RooCode + Boomerang AI + Gemini 2.5 Pro开发套件
  • 【技术派后端篇】深度剖析 Knife4j:从概述到整合及功能优势
  • RK3568 更换显示logo
  • 赋能顶尖AI平台:如何加速高质量AI音乐生成?
  • 架构风格(高软59)
  • STM32单片机入门学习——第38节: [11-3] 软件SPI读写W25Q64
  • Python学习之路(三)
  • 基于MyBatis自定义拦截器实现数据库字段加密脱敏
  • 反转一个字符串
  • C++零基础实践教程 文件输入输出
  • Java转Go日记(一):Slice解密
  • 【字符串的hashCode】hashCode相等但是对应的字符串值不一定相等
  • 分类别中位数归一化
  • 常用正则化技术dropout
  • spark-SQL数据加载和保存
  • 南宁工程建设信息网/嘉兴seo网络推广
  • 西宁建设工程官方网站/seo权重优化
  • 极速网站建设/seo顾问服务咨询
  • 培训学校网站建设要点/有产品怎么找销售渠道
  • 长沙做网站一般要多少钱/查询网站收录
  • 有动态图片的网站源码/品牌营销理论有哪些