C++
文章平均质量分 54
C++编程
gaoZhuanMing
这个作者很懒,什么都没留下…
展开
-
AT&T 汇编
1. 基础x86 的寄存器为32位,x64 的寄存器为64位。寄存器间对应关系:64位寄存器 低32位 低16位 低8位rax eax ax alrbx ebx bx blrcx ecx cx clrdx edx dx dlrsi esi si silrdi edi di dilrbp ebp bp bplrsp esp sp splr8 r8d r8w r8br9 r9d r9w r9br10原创 2022-01-12 16:16:16 · 3503 阅读 · 0 评论 -
C++20 协程
1. 简介协程就是一个可以挂起执行,稍后再恢复执行的函数。协程是无栈式的(stackless),协程挂起时会返回到调用者,且恢复执行所需的数据会分开存储,而不放在栈上。只要一个函数包含 co_await、co_yield 或 co_return 关键字,则它就是协程。一个协程关联有如下多个对象:promise 对象:在协程内部操作此对象,协程通过它提交返回值或异常;协程句柄:在协程外部操作此对象,用于恢复协程的执行或销毁协程帧;协程状态:在堆上分配的内部状态。2. co_await 操原创 2022-01-01 16:59:01 · 3096 阅读 · 0 评论 -
cmake使用
1. C/C++程序编译过程C/C++程序的编译过程包括四个部分:预处理:包括头文件、扩展宏;编译:检查语法,生成汇编代码;汇编:将汇编代码转换为机器码,生成目标文件;链接:合并多个目标文件及所需的静态库文件、或包含动态库调用信息,生成可执行文件。源程序:#include <iostream>using namespace std;int main(){ cout << "hello, world!\n"; return 0;}预处理:[min原创 2021-10-06 21:52:54 · 172 阅读 · 0 评论 -
C++日期时间
1. duration类型template < class Rep, class Period = std::ratio<1>> class duration;template < std::intmax_t Num, std::intmax_t Denom = 1> class ratio;其中,ratio<x, y> 表示分数 xy\frac{x}{y}yx。Rep:用来表示 tick 数(count()原创 2021-09-20 10:20:21 · 124 阅读 · 0 评论 -
C++格式化I/O
1. 输出宽度#include <iostream>#include <iomanip>int main() { std::cout << '[' << std::setw(6) << 42 << "]\n";}[ 42]std::setw(6):设置(只影响)紧随其后的输出内容的最小宽度为 6 个字符。2. 填充字符#include <iostream>#include <iomani原创 2021-09-20 09:37:54 · 144 阅读 · 0 评论 -
C++完美转发
1. std::forawrdstd::forward<T>(arg) 可以实现完美转发,即如果 arg 是一个右值引用,则转发之后结果仍是右值引用;反之,如果 arg 是一个左值引用,则转发之后结果仍是左值引用.#include <iostream>struct BigObject{ char data[1 << 10];};void g(BigObject& o){ std::cout << "lvalue reference原创 2021-09-12 10:21:30 · 3893 阅读 · 0 评论 -
C++文件系统操作
1. 路径使用 std::filesystem::path 类来表示文件路径.#include <iostream>#include <filesystem>namespace fs = std::filesystem;int main(){ fs::path p1("E:\\"); fs::path p2(p1 / "Program Files (x86)" / "Tesseract-OCR"); std::cout << p2; // 判断原创 2021-09-12 10:12:41 · 2247 阅读 · 0 评论 -
C++ 参数包
简介模板参数包是可以接受零个或多个模板参数(非类型、类型或模板)的模板参数。1. 语法(1) 非类型模板参数包:ConcreteType... Args此处 ConcreteType 为具体的类型,如 int.(2) 类型模板参数包:typename... Types(3) 模板模板参数包:(即模板形参是另一个模板)template <parameter-list> typename... Types(4) 参数包扩展:pattern...将 pattern 扩展原创 2021-09-10 19:52:25 · 2054 阅读 · 0 评论 -
C++ Concept
1. 简介C++20 引入了 concept 以在编译期检查模板实参是否满足指定的约束.2. concept约束指定了模板实参需要满足的要求,而 concept 则是约束的命名集合.template <template-parameter-list>concept concept-name = constraint-expression; 此后 concept-name 可以取代 typename 来声明模板形参以添加约束. 也可以将 concept-name<templat原创 2021-09-10 19:22:28 · 1941 阅读 · 0 评论 -
C++线程同步
C++ 标准库提供了如下线程同步机制:互斥量(支持超时加锁、递归加锁)读写锁(共享互斥量,也支持超时加锁)互斥量包装器(基于 RAII 的思想)条件变量信号量(二元信号量、计数信号量)栅栏(支持重用)调用一次1. 互斥量#include <mutex>mutex:提供基础的互斥功能。std::mutex mtx;mtx.lock(); // locks the mutex, blocks if the mutex is not available原创 2021-09-10 19:18:20 · 1324 阅读 · 0 评论 -
C++ range
C++20 引入了 range 来简化对元素序列的处理(可以省略掉许多的循环遍历)。1. range 和 viewrangerange concept 通过提供一个迭代器以及一个哨兵来表示一个元素范围,以允许对某个类型进行遍历。template<class T>concept range = requires(T& t) { ranges::begin(t); ranges::end(t);};如,vector 就是一个 range:std::vector<原创 2021-09-10 19:13:02 · 3918 阅读 · 0 评论 -
C++ 关联容器
1. 简介#include <unordered_map>template < class Key, // unordered_map::key_type class T, // unordered_map::mapped_type class Hash = std::hash&原创 2021-09-10 15:00:39 · 116 阅读 · 0 评论 -
C++正则表达式
1. 匹配基础用法:#include <iostream>#include <string>#include <regex>int main(){ using namespace std::regex_constants; std::string filename("Foo.txt"); std::regex pattern("[a-z]+\\.txt", ECMAScript|icase); // icase: 忽略大小写原创 2021-09-10 14:56:33 · 228 阅读 · 0 评论 -
C++模板特化
C++模板特化包括显式特化(完全特化)和部分特化两种,其作用是为某些参数特化模板(如,可以修改类模板定义、增加或减少类模板成员等)。1. 显式特化语法为:template <> declaration必须实例化所有的模板形参。如,#include <iostream>// primary 模板template <typename T>struct IsVoid{ static constexpr bool value = false;};/原创 2021-09-10 09:08:37 · 298 阅读 · 0 评论