随笔分类 - C++
C++笔记
摘要:查看目标文件信息 查看目标文件段信息 readelf -S test | grep debug 查看文件信息,是否有调试信息等 file test 移除调试信息 strip test gdb调试 1. 可执行文件 gcc -g test.c -o test gdb test (gdb)set arg
阅读全文
摘要:可见性修饰符和目标 cmake中有三种可见性修饰符:PRIVATE、PUBLIC和INTERFACE 这些修饰符随着命令一起使用,如target_include_directories和target_link_libraries等 这些修饰符是在目标targets的上下文中指定的 目标targets
阅读全文
摘要:为了更直观的感受到内存布局,我们使用gcc的编译选项-fdump-lang-class查看 如下代码 class Base{ public: Base(){} virtual ~Base(){} privte: int i; }; 使用如下命令编译 g++ -O0 -std=c++11 -fdump
阅读全文
摘要:在计算机中,我们都知道0.1+0.2是不等于0.3的 那等于多少呢?我们使用程序测试一下 #include<iomanip> int main(){ std::cout<<std::setprecision(18)<<0.1+0.2; return 0; } //out: 0.30000000000
阅读全文
摘要:迭代器失效 序列式容器 vector deque 使用连续分配的内存 删除一个元素,会导致后面的元素前移 不能使用如erase(iter++)这种方式删除元素 erase()会返回下一个有效的迭代器 /* for(iter=v.begin(); iter!=v.end(); iter++){ if(
阅读全文
摘要:C++初始化 C++11之前的初始化 T var; // 构造 T var(val); T var= val; // 列表 T var{val}; T var={val}; C++11统一了初始化方法:列表初始化 brace-initialization 消除了之前初始化基本类型、聚合类型和非聚合类
阅读全文
摘要:构造函数constructor explicit的引入,是为了能够制止“单一参数的constructor”被当作一个conversion运算符 带有默认构造函数的对象成员 若一个类中包含对象成员,且该对象有默认构造函数,此时: 若该类没有构造函数 则编译器会合成一个默认构造函数,且发生在真正调用时
阅读全文
摘要:一、object typedef struct{ float x; float y; float z; }Point3d; 可以有以下方法打印上述类型字段: 定义函数 void print_point3d(const Point3d* pd){ printf("(%g,%g,%g)", pd->x,
阅读全文
摘要:在许多为了性能和效率的场景下,需要开发一些lock-free的算法和数据结构 atomic_flag 原子布尔类型,只支持 test-and-set 和 clear 操作 构造函数 atomic_flag()noexcept=default; atomic_flag(const atomic_fla
阅读全文
摘要:std::future 在介绍promise和packaged_task时多次提到future,现在详细介绍该类型 std::future用来获取异步任务的结果,是一种线程间同步的方式,通常由某个Provider创建,Provider在某个线程中设置共享状态的值,与该共享状态相关联的future对象
阅读全文
摘要:头文件包含: Providers类 std::promise std::packaged_task Futures类 std::future std::shared_future Providers函数 std::async() 其他类型 std::future_error std::future_
阅读全文
摘要:std::packaged_task std::packaged_task包装一个可调用对象,并允许获取该可调用对象计算的结果,可调用对象内部包含两个基本元素: 1.被包装的任务 任务是一个可调用对象,如函数指针或函数对象,该对象的执行结果会传递给共享状态 2.共享状态 用于保存任务的返回结果,并可
阅读全文
摘要:条件变量 类似于pthread库中的pthread_cond_*()提供的功能,C++ 11标准提供了两种表示条件变量的类,分别是condition_variable和condition_variable_any,定义在头文件<condition_variable>中 std::condition_
阅读全文
摘要:互斥量 C++11互斥锁定义在<mutex>头文件中,提供了独占资源的特性 C++11头文件中定义的互斥量 互斥量 说明 mutex 基本互斥量 recursive_mutex 递归互斥量 timed_mutex 定时互斥量 recursive_timed_mutex 递归定时互斥量 std::mu
阅读全文
摘要:进程与线程 进程:系统资源分配的最小单元,通常被定义为一个正在运行的程序实例 线程:系统任务调度的最小单元 进程间通信:管道,信号量,信号,消息队列,共享内存,套接字 线程间通信:锁机制,信号量机制,信号机制,屏障 同步:保证任务片段的先后顺序 互斥:为了保证资源在同一时刻只能被一个线程使用,即数据
阅读全文
摘要:信号 信号是UNIX系统里常用的进程间异步通信方式 asio库提供类,利用异步IO的方式处理UNIX信号 类原型 class signal_set{ public: explicit signal_set(io_service& io_service); signal_set(io_service&
阅读全文
摘要:boost.pool boost.pool库基于简单分隔存储的思想实现了一个快速、紧凑的内存池 不仅能够管理大量对象,还可以用作STL的内存分配器,在需要大量分配或释放小对象时效率很高,且不需要考虑delete 包含4个组成部分 简单pool 分配类实例object_pool 单件内存池single
阅读全文
摘要:asio 基于操作系统提供的异步机制,不要求使用多线程和锁,采用前摄器proactor设计模式,实现了可移植的异步IO操作 目前asio主要关注于网络通信方面,封装了socket API,提供了TCP、UDP、ICMP等网络通信协议,但asio的异步操作不局限于网络编程,还支持UNIX信号,定时器,
阅读全文
摘要:随机数生成设备 随机数生成设备random_device,生成非确定性随机数,在Linux中通过读取/dev/urandom设备,Windows中使用rand_s 重载了()运算符,每次调用会生成一个min()到max()之间的高质量随机数种子,若在Linux(Unix Like)下,可以使用这个生
阅读全文
摘要:ratio 先看一下ratio的定义 template<intmax_t N,intmax_t D=1> class ratio; ratio是由非类型参数定义的模板,用来定义一个比率N/D,如ratio<1,-2>表示-0.5 标准库中定义的常用ratio类型 type definition 说明
阅读全文