![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
文章平均质量分 95
iShare_爱分享
阿里巴巴技术专家,阿里巴巴10年软件开发经验,擅长Linux下C/C++开发,擅长播放器、多媒体技术、Android多媒体框架开发,熟悉WebRTC、FFmpeg等开源软件。
展开
-
《C++ Primer》导学系列:第 19 章 - 特殊工具与技术
定位new表达式可以与自定义类一起使用,以实现更复杂的内存管理。// 预分配的内存// 在buffer中构造MyClass// 手动调用析构函数return 0;在这个示例中,我们在预分配的buffer中使用定位new表达式构造了一个MyClass对象,并在不需要时手动调用析构函数。掌握了如何重载new和delete运算符,以控制类的内存分配和释放。理解了定位new表达式的使用方法,能够在预分配的内存中构造对象,并手动调用析构函数。原创 2024-07-11 07:00:00 · 392 阅读 · 0 评论 -
《C++ Primer》导学系列:第 18 章 - 用于大型程序的工具
掌握了异常处理的基本概念和使用方法,包括throwtry和catch关键字的用法。理解了栈展开和资源管理的机制,确保在异常情况下资源能够被正确释放。学会了定义和使用自定义异常类,能够提供自定义的错误信息。熟悉了函数try语句块的使用方法,能够在构造函数中处理异常。理解了noexcept说明符的作用及其在函数、指针和虚函数中的应用。熟悉了标准库中的异常类层次结构,了解各种常见的标准异常类。命名空间通过关键字namespace引入,用于定义一个作用域,其中可以包含变量、函数、类等声明。原创 2024-07-10 07:00:00 · 558 阅读 · 0 评论 -
《C++ Primer》导学系列:第 17 章 - 标准库特殊设施
tuple定义和初始化tuple非常简单,可以使用来创建一个tuple对象。本节总结了解了tuple类型的定义和初始化方法,掌握了使用创建tuple对象的技巧。学会了使用std::get和std::tie访问和修改tuple元素,以及使用结构化绑定解包tuple。理解了tuple的比较操作规则,能够正确实现tuple的相等比较和大小比较。掌握了使用tuple返回多个值的方法,能够通过std::tie或结构化绑定解包返回的tuple。学会了使用std::apply函数将tuple。原创 2024-07-05 09:00:00 · 1253 阅读 · 0 评论 -
《C++ Primer》导学系列:第 16 章 - 模板与泛型编程
在C++中,模板是一种强大的工具,可以让我们编写通用代码,而不必在编译时指定类型。模板允许我们定义函数模板和类模板,使得相同的代码可以处理不同的数据类型。理解模板的基本概念和语法是掌握高级C++编程的重要一步。类模板允许我们定义一个可以接受任意类型数据成员的类。public:private:本节总结了解了模板的基本概念和语法,掌握了函数模板和类模板的定义方法。理解了模板参数的使用,包括类型参数、非类型参数和模板模板参数。掌握了模板实例化的概念和方法,能够正确实例化函数模板和类模板。原创 2024-07-04 09:00:00 · 1215 阅读 · 0 评论 -
《C++ Primer》导学系列:第 15 章 - 面向对象程序设计
在面向对象程序设计中,基类和派生类是实现继承的关键概念。基类(也称为父类或超类)是派生类(也称为子类或衍生类)的基础,派生类从基类继承属性和行为,并可以添加自己的属性和行为。定义一个基类很简单,我们只需定义一个普通的类。基类可以包含数据成员、成员函数、构造函数、析构函数和其他成员。派生类是从基类继承的类。我们使用关键字publicprotected或private来指定继承方式。通常使用public继承,使得基类的公有成员在派生类中仍然是公有的。本节总结。原创 2024-07-03 09:00:00 · 812 阅读 · 0 评论 -
《C++ Primer》导学系列:第 14 章 - 重载与类型转换
本节总结了解了如何为自定义类重载输入和输出运算符。掌握了输入和输出运算符的基本实现方法,并了解了友元函数的作用。理解了在实现输入运算符时进行错误处理的重要性,以及在实现输出运算符时确保输出格式一致性的必要性。提高建议多练习重载运算符:通过编写更多包含不同类型成员变量的类,并为其重载输入和输出运算符,熟悉各种情况的处理方法。深入理解友元函数:通过阅读相关文档和书籍,深入理解友元函数的作用及其在其他运算符重载中的应用。优化错误处理。原创 2024-07-02 10:00:00 · 901 阅读 · 0 评论 -
《C++ Primer》导学系列:第 13 章 - 拷贝控制
本节总结掌握了拷贝控制的基本概念和操作,包括拷贝构造函数、拷贝赋值运算符和析构函数。理解了拷贝控制函数在对象复制、赋值和销毁过程中的作用和调用时机。学会了在类中正确实现拷贝控制函数,以确保对象在不同生命周期阶段的正确行为。理解了“三/五法则”的重要性,学会了在类设计中同时实现必要的拷贝控制函数和移动语义。掌握了如何通过delete关键字阻止对象的拷贝和赋值。提高建议多练习拷贝控制函数的实现:通过编写更多涉及拷贝控制的类,熟悉各种管理方法的用法,提高对拷贝控制的理解和实现能力。原创 2024-07-01 12:28:45 · 1382 阅读 · 0 评论 -
《C++ Primer》导学系列:第 12 章 - 动态内存
本节总结了解了动态内存分配与释放的基本概念和操作,掌握了new和delete的使用方法。理解了智能指针的基本概念,掌握了和的使用方法。通过智能指针的使用,能够有效避免内存泄漏和双重释放问题,提高了程序的可靠性和稳定性。提高建议多练习智能指针的使用:通过编写更多涉及智能指针的程序,熟悉各种智能指针的用法,提高对动态内存管理的能力。深入理解智能指针的原理:通过阅读文档和相关书籍,深入理解智能指针的实现原理和使用场景,提高编写高效代码的能力。避免常见内存管理错误。原创 2024-06-28 10:00:00 · 1118 阅读 · 0 评论 -
《C++ Primer》导学系列:第 11 章 - 关联容器
关联容器是C++标准库提供的一类容器,用于高效地存储和检索关键字与值的对(key-value pairs)。关联容器包括mapsetmultimap和multiset,它们使用平衡二叉树(如红黑树)来实现,使得查找、插入和删除操作的时间复杂度为对数级(O(log n))。本节总结了解了关联容器的基本概念和类型,掌握了mapsetmultimap和multiset的使用方法。理解了关联容器的特点,包括自动排序、高效查找、键的唯一性和键值对存储。原创 2024-06-27 10:00:00 · 954 阅读 · 0 评论 -
《C++ Primer》导学系列:第 10 章 - 泛型算法
本节总结了解了泛型算法的基本概念和用途,掌握了非修改算法和修改算法的区别。学会了如何选择和使用合适的算法,理解了常用算法的参数和返回值。掌握了一些常用的复杂算法的使用方法,并通过示例代码进行了实践。提高建议多练习算法操作:通过编写更多涉及泛型算法的程序,熟悉各种操作方法,提高对泛型算法的使用能力。深入理解算法:通过阅读标准库文档和相关书籍,深入理解泛型算法的实现原理和使用场景,提高编写高效代码的能力。关注性能优化:在实际项目中,根据具体需求选择最合适的算法和迭代器类型,优化程序性能。原创 2024-06-26 10:00:00 · 893 阅读 · 0 评论 -
《C++ Primer》导学系列:第 9 章 - 顺序容器
C++标准库提供了几种顺序容器,用于存储和管理元素的有序集合。主要的顺序容器包括vectordequelist和。每种容器都有其独特的特性和适用场景。本节总结了解了vectordequelist和等顺序容器的基本特性和适用场景。掌握了这些容器的基本操作,包括插入、删除和遍历。理解了如何根据具体的应用场景选择最合适的容器,以提高程序的性能。提高建议多练习容器操作:通过编写更多涉及顺序容器的程序,熟悉各种容器的基本操作和特性。优化容器选择:在实际项目中,根据具体需求选择最合适的容器,优化程序的性能。原创 2024-06-25 10:00:00 · 1274 阅读 · 0 评论 -
《C++ Primer》导学系列:第 8 章 - IO库
本节总结学习了标准库中的输入输出类,理解了istream和ostream的基本使用方法。掌握了文件输入输出操作,理解了ifstream和ofstream的基本使用方法。了解了字符串流的使用,掌握了和在字符串处理中的应用。理解了IO操作的条件状态,掌握了如何检查和处理IO操作中的错误。学习了管理输出缓冲的方法,掌握了flushends和endl的使用。提高建议多练习文件操作:通过编写更多涉及文件读写操作的程序,熟悉文件操作的流程和错误处理机制。深入理解字符串流。原创 2024-06-24 21:31:18 · 899 阅读 · 0 评论 -
《C++ Primer》导学系列:第 7 章 - 类
在C++中,类是用户定义的类型,提供了一种将数据和操作这些数据的函数(成员函数)组合在一起的方法。类定义了对象的属性和行为,通过实例化类来创建对象。定义类时,需要指定类的名称,并在类体内声明数据成员和成员函数。public:// 成员函数声明private:// 数据成员声明本节总结学习了类的定义和基本概念,掌握了成员函数和数据成员的声明与定义方法。理解了构造函数的作用和定义方法,掌握了构造函数初始化列表的使用。通过示例代码和练习题,加深了对类的接口和实现的理解和应用。提高建议。原创 2024-06-21 13:58:56 · 1216 阅读 · 0 评论 -
《C++ Primer》导学系列:第 6 章 - 函数
函数的定义通常包括返回类型、函数名、参数列表和函数体。函数头声明了函数的返回类型和参数类型,函数体则包含实际执行的代码。本节总结学习了函数的基本概念,掌握了函数的定义、声明和调用方法。理解了形参和实参的作用,掌握了返回类型的定义和应用。通过示例代码和练习题,加深了对函数基础知识的理解和应用。提高建议多练习函数的定义和调用:通过编写各种包含函数的程序,熟悉函数的定义、声明和调用方法。深入理解形参和实参:通过实践掌握形参和实参的对应关系,确保函数调用时参数传递正确。合理设计函数的返回类型。原创 2024-06-20 18:52:47 · 1196 阅读 · 0 评论 -
《C++ Primer》导学系列:第 5 章 - 语句
本节总结学习了简单语句的种类,包括表达式语句、声明语句和空语句,理解了它们在程序中的作用。掌握了复合语句的结构和应用,理解了复合语句中变量的作用域。理解了简单语句和复合语句的基本概念和用法,通过示例代码加深了对这些概念的理解。提高建议多练习简单语句的使用:通过编写各种包含不同简单语句的程序,熟悉它们的用法和作用。深入理解复合语句中的作用域管理:通过实践掌握复合语句中变量作用域的管理,避免作用域混淆导致的错误。优化代码结构:在编写代码时,合理使用复合语句组织代码,提高代码的可读性和维护性。原创 2024-06-18 12:22:42 · 831 阅读 · 0 评论 -
《C++ Primer》导学系列:第 4 章 - 表达式
本节总结了解了组合运算符和运算对象的基本概念,掌握了运算对象在表达式中的作用。掌握了隐式和显式类型转换,理解了它们在表达式计算中的应用。学习了运算符重载的概念,并能够在自定义类型中实现运算符重载。理解了左值和右值的概念,掌握了它们在表达式和赋值中的角色。了解了运算符优先级和结合律的基本知识,并能够应用这些概念分析复杂表达式。理解了求值顺序的重要性,避免未定义行为。提高建议多练习表达式的编写和分析:通过编写各种包含不同运算符的表达式,熟悉运算符优先级和结合律。深入理解类型转换。原创 2024-06-17 13:16:49 · 870 阅读 · 1 评论 -
《C++ Primer》导学系列:第 3 章 - 字符串、向量和数组
命名空间是C++中的一种机制,用于组织代码并避免名字冲突。通过使用命名空间,可以将全局作用域中的标识符组织到逻辑分组中,从而提高代码的可读性和可维护性。命名空间在大型项目中尤为重要,因为它们可以防止不同模块之间的名字冲突。命名空间使用关键字namespace来定义,后跟命名空间的名字和一对花括号。在花括号内定义的所有标识符都属于这个命名空间。语法namespace 命名空间名 {// 命名空间内的内容示例本节总结学习了命名空间的基本概念和定义方法,理解了如何通过作用域解析运算符和using。原创 2024-06-16 12:12:22 · 1253 阅读 · 0 评论 -
《C++ Primer》导学系列:第 2 章 - 变量和基本类型
本小节介绍C++中的基本内置类型。基本内置类型是构成C++程序的基础,它们用于表示数据的不同形式,如整数、浮点数、字符等。理解和使用这些基本类型是编写C++程序的起点。本节总结了解了C++中的基本内置类型,包括整型和浮点型。学习了类型转换的概念和具体用法,包括隐式转换和显式转换。提高建议多练习基本类型的使用:通过编写各种小程序,熟悉不同基本类型的定义和操作。深入理解类型转换:特别是C++风格的显式转换,通过实际应用加深理解。原创 2024-06-15 21:54:39 · 959 阅读 · 4 评论 -
《C++ Primer》导学系列:第 1 章 - 开始
本小节介绍了如何编写和运行一个简单的C++程序,帮助初学者了解C++程序的基本结构和编译运行过程。本节总结了解了一个简单的C++程序的基本结构,包括预处理指令、主函数和输出语句。学会了如何编写、编译和运行一个简单的C++程序。提高建议多编写简单程序:通过不断练习,熟悉C++程序的基本结构和编写流程。探索更多标准库:除了,C++还有许多有用的标准库,可以逐步学习和使用。了解编译器和开发环境:熟悉编译器的使用和常见选项,掌握IDE或命令行的开发环境,提高开发效率。原创 2024-06-14 17:00:23 · 1031 阅读 · 0 评论 -
《C++ Primer》第五版导学系列:导言
C++ Primer》第五版是由Stanley B. Lippman、Josée Lajoie和Barbara E. Moo合著的一本经典教材。自首次出版以来,这本书一直被誉为学习C++编程语言的圣经。第五版在前几版的基础上,进行了全面更新,以适应C++11标准的最新特性和改进。通过阅读这本书,读者将获得对C++语言的深刻理解,掌握从基础语法到高级编程技术的全面知识。原创 2024-06-13 10:39:46 · 1032 阅读 · 0 评论 -
深度解读《深度探索C++对象模型》之C++虚继承的实现分析和效率评测(二)
C++对象在经过类的封装后,存取对象中的数据成员的效率是否相比C语言的结构体访问效率要低下?本篇将从C++编译器的角度出发,来分析虚继承的实现,以及它们的存取效率如何?原创 2024-05-14 12:21:05 · 772 阅读 · 0 评论 -
深度解读《深度探索C++对象模型》之C++虚继承的实现分析和效率评测(一)
C++对象在经过类的封装后,存取对象中的数据成员的效率是否相比C语言的结构体访问效率要低下?本篇将从C++编译器的角度出发,来分析虚继承的实现,以及它们的存取效率如何?原创 2024-05-13 23:02:12 · 951 阅读 · 0 评论 -
深度解读《深度探索C++对象模型》之C++拷贝构造函数(二)
C++的拷贝构造函数什么时候会被生成出来?它完成了哪些功能?本篇将从编译器的角度出发,结合编译器生成的汇编代码,深入分析什么情况下编译器会生成一个拷贝构造函数,以及拷贝构造函数里面做了什么事情。原创 2024-05-11 11:02:05 · 1085 阅读 · 0 评论 -
深度解读《深度探索C++对象模型》之C++对象的内存布局(二)
C++语言相比C语言最重要的功能就是支持面向对象编程,为了实现面向对象编程,C++增加了类的封装和多态、继承等特性,那么这些特性的加入是否会造成对象的内存成本增加?如果增加了,那么到底增加了多少?原创 2024-05-10 12:17:14 · 1237 阅读 · 0 评论 -
深度解读《深度探索C++对象模型》之C++的临时对象(二)
这一篇来讲解临时对象的生命周期,上篇讲解何时产生临时对象,这篇讲解临时对象存在的时间以及何时会被销毁。原创 2024-05-08 11:49:45 · 1191 阅读 · 0 评论 -
深度解读《深度探索C++对象模型》之C++的临时对象(一)
所谓临时对象就是当编译器需要一个空间来暂存表达式的求值结果时临时创建的一个未命名的对象。编译器根据程序的需要可能会安插一些临时变量来支持程序的运行,这些动作是在程序员不可感知的背后默默进行,所以我们有必要了解编译器在背后的所作所为。这些动作有时是为了转换原来的代码的语义以保证代码能顺利地编译通过,有的是为了程序运行的正确性而暂存的对象。原创 2024-05-07 17:47:10 · 1207 阅读 · 1 评论 -
深度解读《深度探索C++对象模型》之C++对象的拷贝
通过分析编译器生成的汇编代码,从中可以看出来,编译器在构造对象时对于虚继承的情况可以抑制对虚基类的构造函数的调用,即编译器把构造函数分化成两个版本的构造函数:complete版本和base版本,当类是一个完整的类时调用的是一个complete版本的构造函数,这个complete版本的构造函数会去调用虚基类(Grand类)的构造函数,如定义一个Derived类的对象,调用的是Derived类的complete版本的构造函数。这时_most_derived为true,所以会去调用Grand类的拷贝赋值运算符。原创 2024-05-06 12:17:28 · 1002 阅读 · 0 评论 -
深度解读《深度探索C++对象模型》之C++对象的析构过程
本篇主要深入分析C++对象的析构过程。原创 2024-04-30 09:02:22 · 1038 阅读 · 1 评论 -
深度解读《深度探索C++对象模型》之C++对象的构造过程(三)
本篇全面深入分析C++对象的构造过程,不同的C++对象的定义方法,是否导致构造C++对象的效率不一样?构造对象的过程中有哪些陷阱?原创 2024-04-29 10:31:28 · 1161 阅读 · 1 评论 -
深度解读《深度探索C++对象模型》之C++对象的构造过程(二)
本篇全面深入分析C++对象的构造过程,不同的C++对象的定义方法,是否导致构造C++对象的效率不一样?构造对象的过程中有哪些陷阱?原创 2024-04-28 10:27:19 · 1380 阅读 · 0 评论 -
深度解读《深度探索C++对象模型》之C++对象的构造过程(一)
本篇全面深入分析C++对象的构造过程,不同的C++对象的定义方法,是否导致构造C++对象的效率不一样?构造对象的过程中有哪些陷阱?原创 2024-04-27 11:35:26 · 823 阅读 · 0 评论 -
深度解读《深度探索C++对象模型》之C++虚函数实现分析与效率评测(四)
本系列深入分析编译器对于C++虚函数的底层实现,最后分析C++在多态的情况下的性能是否有受影响,多态究竟有多大的性能损失。原创 2024-04-26 11:13:15 · 515 阅读 · 0 评论 -
深度解读《深度探索C++对象模型》之C++虚函数实现分析与效率评测(三)
本系列深入分析编译器对于C++虚函数的底层实现,最后分析C++在多态的情况下的性能是否有受影响,多态究竟有多大的性能损失。原创 2024-04-25 11:50:36 · 1077 阅读 · 0 评论 -
深度解读《深度探索C++对象模型》之C++虚函数实现分析与效率评测(二)
本系列深入分析编译器对于C++虚函数的底层实现,最后分析C++在多态的情况下的性能是否有受影响,多态究竟有多大的性能损失。原创 2024-04-24 10:54:39 · 1104 阅读 · 0 评论 -
深度解读《深度探索C++对象模型》之C++虚函数实现分析与效率评测(一)
本系列深入分析编译器对于C++虚函数的底层实现,最后分析C++在多态的情况下的性能是否有受影响,多态究竟有多大的性能损失。原创 2024-04-23 12:37:08 · 1174 阅读 · 0 评论 -
深度解读《深度探索C++对象模型》之C++数据成员的存取效率分析(三)
C++对象在经过类的封装后,存取对象中的数据成员的效率是否相比C语言的结构体访问效率要低下?本篇将从C++类的不同定义形式来一一分析C++对象的数据成员的访问在编译器中是如何实现的,以及它们的存取效率如何?原创 2024-04-22 11:11:22 · 832 阅读 · 0 评论 -
深度解读《深度探索C++对象模型》之C++数据成员的存取效率分析(二)
C++对象在经过类的封装后,存取对象中的数据成员的效率是否相比C语言的结构体访问效率要低下?本篇将从C++类的不同定义形式来一一分析C++对象的数据成员的访问在编译器中是如何实现的,以及它们的存取效率如何?原创 2024-04-21 10:52:13 · 753 阅读 · 0 评论 -
深度解读《深度探索C++对象模型》之C++数据成员的存取效率分析(一)
C++对象在经过类的封装后,存取对象中的数据成员的效率是否相比C语言的结构体访问效率要低下?本篇将从C++类的不同定义形式来一一分析C++对象的数据成员的访问在编译器中是如何实现的,以及它们的存取效率如何?原创 2024-04-20 11:02:25 · 1060 阅读 · 0 评论 -
深度解读《深度探索C++对象模型》之C++返回值优化
返回值优化是什么意思?编译器在什么情况下会启用返回值优化,返回值优化能获得多少性能的提升?它有什么优缺点?本篇将从背后的机制来深入分析。原创 2024-04-19 10:15:33 · 1173 阅读 · 0 评论 -
深入分析C++对象模型之C++移动构造函数
C++11新标准中最重要的特性之一就是引入了支持对象移动的能力,移动语义的加持使得移动一个如容器之类的大对象的成本可以像复制一个指针一样低廉了,于是出现了各种各样的传言:如编译器会使用移动操作来替代拷贝操作以获得效率上的提升,甚至说将符合C++98标准的以前的老代码用符合C++11新标准的编译器重新编译一次,一行代码未改即可获得运行速度上质的提升。对于种种传闻,事实上是否如此?原创 2024-04-18 11:18:59 · 867 阅读 · 0 评论