智能指针的工厂函数是一个创建智能指针的函数,用于方便地创建特定类型的智能指针对象,这些函数通常都是以 make 开头的函数。比如 1. make_unique std::make_...
定点小数是一种用固定位数表示小数部分的数值表示方法。在定点小数中,小数点的位置是固定的,不像浮点数那样可以在数字中的不同位置浮动。 1. 存储原理 使用定点数存储小数,我们首先得先...
在 C++11 标准中引入的 default 关键字,主要用于在类的声明中显式指定编译器生成默认的特殊成员函数实现。这些特殊成员函数包括: 1. 默认构造 https://en.c...
函数对象有时也叫仿函数,其本质是一个类对象,由于重载函数调用符号,其可以像普通函一样使用。 1. 函数调用符号重载语法 2. 函数对象相对于普通函数的优点 C++中使用函数对象作为...
常对象指的是使用 const 关键字修饰的类对象,常函数指的是由 const 关键字修饰的函数。这里需要注意:只有成员函数才可以被 const 关键字修饰,而全局函数无法被 con...
1. 类对象的默认赋值行为 2. 类对象中深赋值和浅赋值问题 3. 类对象的移动赋值行为 当对象进行赋值的时,并不是所有的对象都需要完整的赋值过程(重新申请内存、数据拷贝)。假设,...
1. 委托构造函数的使用场景 缺点:每个构造函数都有重复的成员变量的初始化语句 初始化交给一个普通成员函数,该成员函数无法使用简洁的初始化列表语句,需要额外给类增加一个初始化函数。...
在 C++ 11之后,值的类别有三种:左值(lvalue)、纯右值(prvalue)、将亡值(xvalue)。 1. 左值 在C++中,左值(lvalue)是指表达式结束后仍然存在...
移动语义是 C++11 标准引入的一个特性,旨在通过优化资源管理改善 C++ 的效率。移动语义主要涉及通过右值引用(rvalue references)来避免不必要的深拷贝,从而减...
1. 异常对象的保存 异常对象保存,指的是当异常发生时,我们将其捕获,但是并不马上处理,而是将其存储起来。这样的话,我们可以在程序最后、或者其他的并行任务的进程、线程里处理。 接下...
1. 多继承的名字冲突问题 多继承:一个类可以同时继承多个类,但是多继承很容易产生同名冲突(函数、变量)。 对于上述情况,如果由于多继承出现的名字冲突问题,需要通过指定类作用域的方...
C++ 中的 using 用法有很多种,我们下面剖析下常见几种场景: using 关键字给类型增加别名 using 用于继承中的同名函数 using 关键字用于构造函数 1. us...
unordered_map 和 unordered_multimap 容器的内部和 map 容器一样,存储的都是键值对, 以 pair 类型存储。 unordered_map 是无...
队列 : 先进先出,按照我们添加元素的顺序来决定优先级队列 : 并不是按照元素的添加顺序来访问,而是按照优先级来访问
vector 容器叫做动态数组,其大小可以随着元素的增长而变化,创建得时候不需要指定大小。vector 容器和 array 容器一样使用一块连续的内存空间来存储。 动态增长原理:1...
array 是一个数组,对 C-style 的数组的封装(int arr[] = {10, 20, 30}) 为什么C++要对 C 风格的数组进行封装?而不是直接使用C风格数组?a...
什么是链表?链表是由一些列节点组成的,每一个阶段包含数据域、指针域,每个节点的内存都是独立,使用的是非连续的内存。 链表分为:单向链表、双向链表、循环链表单向链表的开销最低,空间只...
STL 中的迭代器有以下几种:输入迭代器、输出迭代器、正向迭代器、双向迭代器、随机访问迭代器。1. 输入迭代器:一次只能读取一个元素,只能向前移动,支持:++、==、!=、(只读)...