C++_ 模板学习三
成员模板、变量模板与模板模板参数 成员模板 普通类和类模板都可以包含成员模板 类模板中的成员模板 同一个 Box<int> 对象可以调用不同的成员模板特化 类外定义成员模板 不同类模板特化之间的转换 默认情况下它们是完全不同的类型: 可以用成员模板实现转换构造 为什么...
成员模板、变量模板与模板模板参数 成员模板 普通类和类模板都可以包含成员模板 类模板中的成员模板 同一个 Box<int> 对象可以调用不同的成员模板特化 类外定义成员模板 不同类模板特化之间的转换 默认情况下它们是完全不同的类型: 可以用成员模板实现转换构造 为什么...
非类型模板参数 NTTP 概述 前面使用的模板参数都是“类型” 非类型模板参数传递的是编译期常量值 固定容量的栈 值也是类型身份的一部分 下面是两个完全不同的类型 非类型模板实参必须是编译期常量 合法 不合法 Capacity 不会作为普通成员存储 Capacity 是编译期值,...
函数模板与实例化 模板是什么 普通函数只能处理声明好的类型 如果还要处理 double、std::string,不使用模板就需要重复编写 模板的作用是 描述一组具有相同结构、但类型不同的函数 这段代码本身不是一个普通函数,而是一个函数模板,也可以理解为编译器生成函数的“配方” 模...
概述 decltype 从 C++11 引入,用来在编译期获取一个实体或表达式的类型 它与 auto 最大的区别是: auto 通常会进行类型退化,而 decltype 会精确保留 const、引用、数组以及表达式的值类别 规则一:未加括号的名字或成员访问 如果操作数是: 未加括...
概述 C++20 协程的核心不是“创建线程”,而是 把一个函数编译成可以暂停、保存现场、稍后恢复的状态机 协程本身不提供线程、调度器、事件循环或异步 I/O 它只提供语言机制,真正决定“何时恢复”的是 Awaiter、线程池、Asio 等运行时 关键字 co_await 等待某个...
thread_info_base 干什么的 是一个per-thread(每线程)内存池 / 分配器缓存,核心目的是:减少异步操作中反复 new/delete 的开销 背景 ASIO 里每次调用 async_read、async_write 之类的操作,内部都需要分配一小块内存来保...
同步 I/O:服务端 code 同步 I/O:客户端 code 异步I/O:服务端 code 异步I/O:客户端 code 定时器 code 线程池 code strand 概述 io_context::run() 可以被多个线程同时调用(线程池模式)。这时候多个 handler...
std::memory_order_relaxed 总结1 线程 A 使用 memory_order_relaxed 写入 x,不会与线程 B 对 x 的读取建立 happens-before 关系,因此无法保证线程 B 的读取一定能看到 A 写入的新值 本质 多核 CPU 并不...
线程 概述 一个线程不仅仅是一段正在执行的代码,而是下面几部分的集合 CPU 执行现场 内核调度信息 用户态线程环境 线程私有数据 Windows和Linux Linux 和 Windows 的整体模型非常相似 同一进程内的线程共享进程资源,但每个线程拥有独立的执行现场、栈、调度...
终端命令操作 add了文件,从工作区去掉 没有add,撤销改动 commit了,没有push,撤销commit,保留文件改动 commit了,没有push,撤销commit,不保留文件改动 本地commit了多(3)次,没有push,合并为一次 进入编辑 可以修改顺序,或操作,保...