C++
文章平均质量分 70
Louis-Henry
这个作者很懒,什么都没留下…
展开
-
深度探索 C++ 对象模型 01:对象模型简介(附静态成员介绍)
C - 过程式(procedural)语言:数据和处理数据的操作(函数)分开声明,语言本身并不支持数据和操作之间的关联性过程式语言由一组分布在函数中的算法所驱动,这些函数以功能为导向,这些算法则处理共同的外部数据typedef struct point3d{ float x; float y; float z;} Point3d;void print_point3...原创 2018-10-18 20:56:50 · 231 阅读 · 0 评论 -
C++ Idioms 04
本文介绍了 C++ 的 5 个特别用法(Idioms),分别是Named Constructor;Non-copyable Mixin;Exception Safe Swap;Resource Acquisition Is Initialization (RAII);Resource Return;16. Named Constructor用途以更直观的方式创建对象...原创 2018-10-28 13:35:11 · 284 阅读 · 0 评论 -
C++ Idioms 01
本文介绍了 C++ 的 5 个特别用法(Idioms),分别是addressof();Attorney-Client;Calling Virtuals During Initialization;Capability Query;Clear-and-minimize;01. addressof()用途类可以重载 & 使其违反“取对象地址”的本意,此时可以通过 a...原创 2018-10-28 13:36:20 · 352 阅读 · 0 评论 -
C++ Idioms 02
本文介绍了 C++ 的 5 个特别用法(Idioms),分别是Concrete Data Type;Lazy Evaluation;Copy and Swap;Copy on Write;Reference Counting;06. Concrete Data Type用途通过允许或禁止动态内存分配来控制对象的生存期和作用域示例代码只允许通过动态内存分配的方式创...原创 2018-10-28 13:37:04 · 290 阅读 · 0 评论 -
C++ Idioms 05
本文介绍了 C++ 的 5 个特别用法(Idioms),分别是Shrink to Fit;Thin Template;Type Selection;Virtual Constructor;Virtual Friend Function;21. Shrink to Fit用途令容器的容量最小化至其元素个数示例代码vector<int> v;vecto...原创 2018-10-28 14:50:57 · 277 阅读 · 0 评论 -
深度探索 C++ 对象模型 04:成员函数
C++ 支持三种 member function:static、nonstatic 和 virtualMember Function 的调用方式nonstatic member functionC++ 保证 nonstatic member function 至少和普通 non-member function 有相同的效率,member function 会被内部转化为 non-mem...原创 2018-10-25 21:54:52 · 221 阅读 · 0 评论 -
C++ Idioms 03
本文介绍了 C++ 的 5 个特别用法(Idioms),分别是Curiously Recurring Template Pattern;Empty Base Optimization;Erase-Remove;Inner Class;Int to Type;11. Curiously Recurring Template Pattern用途使用派生类作为模板参数特化基...原创 2018-10-27 22:49:27 · 355 阅读 · 0 评论 -
C++ 设计模式 02:面向对象 SOLID 设计原则
Single Responsibility Principle 单一职责原则每个类只负责一项职责,因此也只有一个变化点在一个结构体系里,如果经常需要在多个类中同步地做相同的改动,那通常意味着设计不良杜绝“万能类”class Journal{public: explicit Journal(const string&amp; _title) : title(_title) {}...原创 2018-10-22 14:54:43 · 491 阅读 · 0 评论 -
C++ 设计模式 01:设计模式一览
本文根据 GoF 英文原版 Design Patterns: Elements of Reusable Object-Oriented Software 和中文版《设计模式:可复用面向对象软件的基础》 以及李建忠老师的课程 C++ 设计模式 整理01. Abstract Factory 抽象工厂模式提供一个接口以在不必指定具体类的条件下构建一系列相关或相互依赖的对象02. Adapt...原创 2018-10-22 14:49:17 · 185 阅读 · 0 评论 -
C++标准库源码分析之 iterator
本文代码根据 GNU ISO C++ Library 所含库文件整理,同时参考了 Microsoft Visual Studio Community 2017 版本 15.8.4 的库文件源代码和《STL 源码分析》(侯捷著)中的第 3 章内容本文暂时略去了源文件中的异常处理代码iterator 概述每一种 STL 容器都有专属的迭代器,避免暴露容器的内部结构iterator 的种...原创 2018-10-12 17:05:22 · 1463 阅读 · 0 评论 -
C++标准库源码分析之 array
array本文代码根据 GNU ISO C++ Library 所含库文件整理,同时参考了 Microsoft Visual Studio Community 2017 版本 15.8.4 的库文件源代码本文暂时略去了源文件中的异常处理代码本文暂时略去了源文件中 array 对 tuple 的支持array 概述用于存储固定数量元素序列的标准容器以内置数组为基础实现依赖项:&amp;amp;amp;l...原创 2018-10-11 14:04:08 · 2473 阅读 · 0 评论 -
C++ 笔记:动态内存和智能指针
对象的生存期:全局对象:程序启动时创建,程序结束时销毁局部自动对象:进入对象所在程序块时创建,离开程序块时销毁static 对象:第一次使用时创建,程序结束时销毁动态分配的对象:创建之后只有在显式地被释放时才会销毁每个程序拥有一个内存池,称为自由空间或堆,用来存储动态分配的对象智能指针传统的动态内存管理:new:在动态内存中为对象分配空间,返回一个指向该对象的指...原创 2018-10-02 18:48:37 · 303 阅读 · 0 评论 -
C++ 笔记:关联容器
关联容器概述顺序容器中的元素按其在容器中的顺序保存和访问,而关联容器中的元素则按关键字保存和访问关联容器类型mapkey - value 映射的集合,关键字不允许重复,且有序排列#include &lt;map&gt;使用例子:string word;map&lt;string, size_t&gt; word_count; // 一个从字符串到计数的空 map ...原创 2018-10-02 16:55:00 · 570 阅读 · 0 评论 -
C++ 笔记:函数
函数基础形参和实参编译器能以任意可行的顺序对实参求值实参数量应与形参数量一致,所以形参一定会被初始化局部对象形参和函数体内部定义的变量统称为局部变量,局部变量仅在函数的作用域内可见,并将外层作用域中的同名变量隐藏在所有函数体之外定义的对象存在于程序的整个执行过程中。此类对象在程序启动时被创建, 直到程序结束才会销毁局部静态对象在程序的执行路径第一次经过对象定义语句时初始化,并且...原创 2018-10-01 19:57:38 · 229 阅读 · 0 评论 -
C++ 笔记:引用、指针和 const 限定符
引用、指针和 const 限定符引用指针`const` 限定符对 `const` 的引用指向 `const` 的指针指向非常量的 `const` 指针指向 `const` 的 `const` 指针顶层 `const`引用引用必须初始化,也就是说,引用从“出生”开始就必须绑定至另一个对象,且必须“从一而终”引用必须绑定至对象,而不能绑定至字面值或表达式计算结果引用的类型要和其绑定的对象严格...原创 2018-10-01 15:36:16 · 382 阅读 · 0 评论 -
深度探索 C++ 对象模型 02:构造函数
Default Constructorclass MyClass{public: int val; MyClass* pnext;};void foobar(){ MyClass obj; if(obj.val || obj.pnext) // do something}以上代码片段的程序语义要求 MyClass 的 default construct...原创 2018-10-19 16:11:00 · 231 阅读 · 0 评论 -
深度探索 C++ 对象模型 03:数据成员
即使一个类表面上是空的,它也内含一个隐式的 char,从而确保这个类的任意两个 object 不会在内存中占用相同的地址类的 nonstatic data member 放置其各个 object 感兴趣的数据,而类的 static data member 则放置类本身感兴趣的数据nonstatic data member 直接存放在每一个 class object 中,对于继承而来的 no...原创 2018-10-19 19:44:34 · 198 阅读 · 0 评论 -
C++ 中的型别推导
C++ 中的型别推导1. 模板型别推导对于以下函数模板和调用// 函数模板template<typename T>void func(ParamType param);// 调用模板函数func(expr);编译器会在编译期通过 expr 推导两个型别:T 和 ParamType。比如// 函数模板template<typename T>void ...原创 2018-11-02 16:56:09 · 902 阅读 · 1 评论