深入 C 语言和程序运行原理
于航
PayPal 技术专家
21121 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 49 讲
深入 C 语言和程序运行原理
15
15
1.0x
00:00/00:00
登录|注册

加餐 | 和 C 语言相比,C++ 有哪些不同的语言特性?

Modules
Coroutines
Ranges
Concepts
C++20 的新特性
右值引用
类型转换操作符
decltype 运算符
列表初始化
std::weak_ptr
std::unique_ptr
std::shared_ptr
模板元编程 (TMP)
类模板
函数模板
算法、迭代器和适配器
容器类型(如 std::vector
成员属性与方法
类的构造函数、拷贝构造函数
类、继承、虚函数
openJDK
LLVM Compiler 套件
Chromium 浏览器引擎
V8 引擎
C++23 标准在酝酿中
C++14、17、20
C++11
C++03
C++98
个人使用经验分享
C++ 的优点和缺点
C++ 的复杂性和臃肿
C++ 特性使得软件开发更高效
C++ 适用于多种编程范式
C++ 提供了更多抽象和扩展
其他特性
智能指针
模板
标准模板库 (STL)
类和面向对象
开源项目实例
多范式系统级编程语言
底层硬件交互
高性能要求
C++ 标准的演进
C with Classes 到 C++ 的更名
Bjarne Stroustrup 开始研发 C++
思考题
总结
C++ 语言特性
C++ 应用场景
C++ 发展简史
C++ 与 C 的不同特性

该思维导图由 AI 生成,仅供参考

你好,我是于航。
在之前的春节策划三里,我为你介绍了如何使用 C++ 语言来实现一个简单的 JIT 编译器,你能够从中大致感受到 C 和 C++ 这两种语言在使用上的差异。那么这次的加餐,我就用专门的一讲,来为你介绍 C++ 与 C 相比究竟有何不同。
C 语言的语法简单,且贴近底层硬件。使用它,我们能在最大程度上为程序提供较高的运行时性能。但在 C 语言诞生的几年后,它开始逐渐无法满足人们在构建应用程序时对编码范式的需求。而一门基于 C 语言构建的,名为 C++ 的语言便由此诞生。作为一个 C 语言使用者,也许你还在犹豫要不要把 C++ 作为下一门继续学习的编程语言,那么相信在学习完这一讲后,你会有进一步的思考。
在具体比较 C 和 C++ 之前,我们先来看看 C++ 的发展历史和应用场景,从整体视角对它有一个了解。

C++ 发展简史

丹麦计算机科学家 Bjarne Stroustrup(下面简称 BS)从 1979 年开始研发 C++ 这门编程语言。BS 于 1979 年从剑桥大学取得博士学位,在撰写博士论文的过程中,他发现 Simula 语言(该语言被认为是第一个面向对象的编程语言)的某些特性对大型软件的开发十分有帮助,但遗憾的是,该语言本身的执行效率却并不高。
毕业之后,他前往位于美国新泽西州的贝尔实验室,以研究员的身份开始了职业生涯。在工作期间,为了解决遇到的一个棘手问题,BS 决定选择当时被广泛使用的,具备较高性能和兼容性的 C 语言作为基准语言,开始为其添加与 Simula 类似的,面向对象的相关特性。通过直接修改 C 编译器,包括类、继承、默认参数等在内的一系列新特性被“整合”到了 C 语言中,这一新语言在当时也被直观地称为 “C with Classes”。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

C++语言特性概览 C++语言作为C语言的扩展,具有丰富的特性和功能。文章首先介绍了C++中的面向对象编程特性,包括类、继承、虚函数等,以及对应的代码示例。其次,文章提到了C++标准模板库(STL),介绍了STL中的常用容器类型和算法,并给出了相应的代码示例。接着,文章介绍了C++中的模板特性,包括函数模板和编译期计算,以及模板元编程的应用。此外,文章还介绍了C++中的智能指针,以及其他重要的语言功能,如列表初始化、decltype运算符、cast类型转换操作符、右值引用等。最后,文章提到了C++20标准中新增的四大特性,即Concepts、Ranges、Coroutines、Modules。总的来说,C++语言具有丰富的特性和功能,包括面向对象编程、STL、模板、智能指针等,以及不断更新的语言标准,为开发者提供了广阔的学习和探索空间。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《深入 C 语言和程序运行原理》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(2)

  • 最新
  • 精选
  • LDxy
    置顶
    1,C++在调用C写的函数时感到很困惑,有的人说要在C函数前加上:: 有的人又说不用加可以直接调。2,在C++中包含处理C字符串的头文件,有人说包含string.h就行,有人说要包含cstring。3,智能指针是可以在频繁创建对象且对程序性能有要求的场合用吗?4,源文件的后缀名也很糊涂,命名为*.cpp, *.cc, *.hpp, *.hh, *.h的都有,到底该用哪种?5,std::this_thread::sleep_for(std::chrono::milliseconds(50))和Sleep(50)是等价的吗?

    作者回复: 很棒的问题! 1. 这个问题应该取决于你的代码是怎么写的,通常来说,通过 “#include” 包含进来的 C 头文件应该是在全局作用域的,因此,调用的时候自然也是需要使用全局作用域中的那个,但实际上需不需要 “::” 则取决于你的具体调用地; 2. 这个肯定还是建议包含以 “c” 开头的这些头文件; 3. 实际上是可以使用的,但对于性能这类问题,建议还是以具体的 case 入手再进行分析,看瓶颈在哪里,而不是听到智能指针有一些性能损耗就直接放弃。就比如边界检查实际上也有开销,但大多数情况都不是影响程序性能的那 80% 的重要因素,在流水线化的处理器上根本不成问题; 4. 后缀名实际上对编译来说没有区别,选择配套的来用就行,比如 .cc 与 .hh;.cpp 与 .hpp。但混用关系也不大,可能会影响某些老的调试工具的某些功能。 5. 这两个方法的抽象层次不同,一个是语言标准库中定义的,一个是 POSIX 标准中定义的。两者可能在调用上有一定重合,比如编译器在实现 sleep_for 时可能会在底层直接调用操作系统提供的 sleep 方法。具体依编译器而定。

    2022-03-14
    3
    2
  • ahack
    这一节课收获很大,印象最深刻的在于c++是c的内容的选择并增添了类的特性,除此之外还针对频繁的内存管理生产出了智能指针,再就是性能这里有封装有优化就会有性能开销,所以在某些极致的场景下没有添加任何额外开销的c性能更优秀,我这才懂了为啥马斯克说我支持rust
    2022-03-15
    1
    1
收起评论
显示
设置
留言
2
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部