随笔分类 -  c++

摘要:互斥锁与condition_variable的区别 互斥锁用于保护一段临界区,也就是各个线程互斥地去访问同一块资源,这是一种很简单直接的同步手段,可以cover住很大一类的同步场景,比如多线程修改一个非线程安全的unordered_map。但是对于另外一类很常见的同步需求却很吃力:线程需要用到其他线 阅读全文
posted @ 2022-12-28 00:17 吹不散的流云 阅读(98) 评论(0) 推荐(0) 编辑
摘要:std::tuple std::tuple 常用容器:tuple std::tuple<...> 可以将多个不同类型的值打包成一个。尖括号里填各个元素的类型。之后可以用 std::get<0> 获取第0个元素,std::get<1> 获取第1个元素,以此类推(从0开始数数)。 #include <i 阅读全文
posted @ 2022-09-20 23:54 吹不散的流云 阅读(347) 评论(1) 推荐(0) 编辑
摘要:函数也是对象 函数可以作为另一个函数的参数: #include <cstdio> template <class Func> void call_wait(Func func) { func(0); func(1); } int main() { auto myFunc = [](int n) { 阅读全文
posted @ 2022-09-20 23:46 吹不散的流云 阅读(84) 评论(0) 推荐(0) 编辑
摘要:模板函数 为什么需要模板函数(template) 避免重复写代码 int twice(int i) { return i * 2; } float twice(float f) { return f * 2; } double twice(double d) { return d * 2; } in 阅读全文
posted @ 2022-09-20 23:42 吹不散的流云 阅读(127) 评论(0) 推荐(0) 编辑
摘要:左值、右值、左值引用、右值引用 左值(lvalue) 左值不能简单理解为就是等号左边的值,其实只要能取地址,那这个表达式就是左值。可以取地址意味着在程序的某块内存地址上已经存储了他的内容。 举例一些常见的左值: 具名的变量名 左值引用 右值引用也是左值 返回左值引用的函数或是操作符重载的调用语句。 阅读全文
posted @ 2022-08-01 10:32 吹不散的流云 阅读(132) 评论(0) 推荐(0) 编辑
该文被密码保护。
posted @ 2022-06-12 16:12 吹不散的流云 阅读(0) 评论(0) 推荐(0) 编辑
摘要:动态内存 静态内存:用来保存局部static对象、类static数据成员以及定义在任何函数之外的变量。 栈内存:用来保存定义在函数内的非static对象。 自由空间(free store)或堆(heap):程序用堆存储动态分配的对象——程序运行时分配的对象。 分配在静态内存和栈内存中的对象由编译器自 阅读全文
posted @ 2022-06-12 15:57 吹不散的流云 阅读(100) 评论(0) 推荐(0) 编辑
摘要:一、旧式风格的类型转换 C++类型转换分为显式类型转换和隐式类型转换 ,隐式类型转换由编译器自动完成,这里只讨论显式类型转换。 type(expr); // 函数形式的强制类型转换 (type)expr; // C语言风格的强制类型转换 隐式类型转换是安全的,显式类型转换是有风险的,C语言之所以增加 阅读全文
posted @ 2022-06-11 18:24 吹不散的流云 阅读(77) 评论(0) 推荐(0) 编辑
摘要:区别与联系 相同点: 指针指向一块内存,它的内容是所指内存的地址;引用是某块内存的别名。 区别: 指针是一个实体,而引用仅是个别名; 引用使用时无需解引用(*),指针需要解引用; 引用只能在定义时被初始化一次,之后不可变;指针可变;引用“从一而终” _ 引用没有 const,指针有 const,co 阅读全文
posted @ 2022-06-11 17:54 吹不散的流云 阅读(40) 评论(0) 推荐(0) 编辑
摘要:第一章 类型推导 1. 理解模板类型推导 在模板类型推导时,有引用的实参会被视为无引用,他们的引用会被忽略 对于通用引用的推导,左值实参会被特殊对待 对于传值类型推导,const和/或volatile实参会被认为是non-const的和non-volatile的 在模板类型推导时,数组名或者函数名实 阅读全文
posted @ 2022-04-18 00:14 吹不散的流云 阅读(406) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示