![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
编程基础の基础
文章平均质量分 54
紫菜花油菜花
这个作者很懒,什么都没留下…
展开
-
【编程基础の基础】闭包的理解以及libco库中的closeure学习
概念百度定义:闭包是指可以包含自由(未绑定到特定对象)变量的代码块;这些变量不是在这个代码块内或者任何全局上下文中定义的,而是在定义代码块的环境中定义(局部变量)闭包,即有状态的函数,更直接的来说,便是一个类一个函数,带上“状态”,便是闭包,按如下理解闭包有属于自己的变量(非static)变量的值(状态),在创建时绑定调用闭包时,可访问这些变量故总结如下:函数是代码,状态是一组变量,将代码和一组变量捆绑,即是闭包闭包的实现重载operator()class MyFunctor原创 2021-07-27 22:02:55 · 196 阅读 · 0 评论 -
【编程基础の基础】“#define _GNU_SOURCE“或是在编译时“-D _GNU_SOURCE“代表了什么?有什么用
概念详细的信息可查看Linux手册man feature_test_macros从GNU的文档中:Macro: _GNU_SOURCEIf you define this macro, everything is included: ISO C89, ISO C99, POSIX.1, POSIX.2, BSD, SVID, X/Open, LFS, and GNU extensions. In the cases where POSIX.1 conflicts with BSD, the PO原创 2021-07-27 17:38:32 · 1743 阅读 · 0 评论 -
【编程基础の基础】CRTP+不定参数+单例模式
为便于编写不同派生类的单例模式(不同派生类的构造函数具有不相同的参数数目),故基于一般CRTP单例模式,编写了如下不定参数的CRTP单例模式。如下为头文件。// crtp.h#include<memory>#include<mutex>template<class Derived>class Singleton{public: template<class ...Args> static Derived& get_Inst原创 2021-06-18 00:07:11 · 260 阅读 · 0 评论 -
【编程基础の基础】syscall(SYS_gettid)
解决不同进程下,线程id相同情况无法通信的问题在linux下每一个进程都一个进程id,类型pid_t,可以由 getpid()获取。POSIX线程也有线程id,类型pthread_t,可以由 pthread_self()获取,线程id由线程库维护。但是各个进程独立,所以会有不同进程中线程号相同节的情况。那么这样就会存在一个问题,我的进程p1中的线程pt1要与进程p2中的线程pt2通信怎么办?进程id不可以,线程id又可能重复,所以这里会有一个真实的线程id唯一标识,tid。glibc没有实.原创 2021-04-18 16:05:05 · 4403 阅读 · 0 评论 -
【编程基础の基础】__builtin_expect详解(汇编级解释)
这个指令是gcc引入的,作用是允许程序员将最有可能执行的分支告诉编译器(优化执行,减少跳转)。这个指令的写法为:__builtin_expect(EXP, N)。意思是:EXP==N的概率很大。一般的使用方法是将__builtin_expect指令封装为likely和unlikely宏。这两个宏的写法如下.#define likely(x) __builtin_expect(!!(x), 1) //x很可能为真 #define unlikely(x) __builtin_expect.原创 2021-04-18 01:05:27 · 2266 阅读 · 2 评论 -
【Effective C++】总结整理之3_资源管理
文章目录3.资源管理13.以对象管理资源`auto_ptr`——智能指针`tr1::shared_ptr`——RCSP(reference-counting smart pointer)13总结14 在资源管理类中小心copying行为当一个RAII对象被赋值,会发生什么事情?禁止复制引用计数法——`tr1::shared_ptr`14总结15 在资源管理类中提供对原始资源的访问智能指针显式隐式获取原始资源15总结16 成对使用new和delete时要采取相同形式17 以独立语句将`newed`对象置入智能原创 2020-09-12 16:59:59 · 138 阅读 · 0 评论 -
vector拷贝构造和赋值构造与容量、大小的关系
vector拷贝构造和赋值拷贝时,容器容量和大小的关系考虑3种情况下拷贝构造赋值拷贝(未指定reserve)赋值拷贝(指定reserve)代码实现:using namespace std;void showinfo(vector<int>& v) { cout << "容量" << v.capacity() << "\t"; cout << "大小" << v.size() <<"原创 2020-08-25 09:10:49 · 460 阅读 · 0 评论 -
vector迭代器失效问题(增删改)(push_back,pop_back,erase,clear)
文章目录Vector迭代器增、删、改导致的literator失效问题增capacity不足capacity充足——首插capacity充足——中插capacity充足——尾插总结删尾删头删(和中删类似)执行clear()总结改Vector迭代器增、删、改导致的literator失效问题增capacity不足当vector插入数据后,超过容量的情况例子//capacity()不足,在末尾添加元素void showInfo(vector<int> &v) { cout原创 2020-08-24 17:23:29 · 1241 阅读 · 0 评论 -
【编程基础の基础】初始化列表和构造函数内初始化
先上结论使用初始化列表主要基于性能问题。对于内置类型,初始化列表与构造函数几乎无差异对于类类型(特别是复杂类型),由于使用初始化列表少调用了一次默认构造函数的过程,对数据密集型的类来说,是非常高效的!。代码实例针对于类类型,来证明【初始化列表少调用了一次默认构造函数】#include <iostream>using namespace std;class AA{public: AA() { std::cout << "AA: default con原创 2021-04-03 13:08:10 · 168 阅读 · 0 评论 -
【编程基础の基础】为什么要字节对齐?
什么是字节对齐?计算机并非逐字节读取内存,而是按2,4,8的倍数的字节块读写内存,故地址必须为上述倍数,故各种数据类型需要按照一定规则在空间上排列对齐准则结构体变量首地址可被对齐字节数大小所整除结构体每个成员相对该结构体首地址的偏移都是成员大小的整数倍(如需要,填充字节)结构体总大小为结构体对齐字节数大小的整数倍为什么要字节对齐?可优化【读写效率】【空间存储】【跨平台通信】读写效率考虑场景如下:若计算机每次读取8字节块,此时读取一个double,若未字节对其,可能该double位与原创 2021-04-02 15:56:10 · 247 阅读 · 0 评论