c++
c++从入门到实战
官方认定好文
这个作者很懒,什么都没留下…
展开
-
c++万能引用、完美转发
一、万能引用只有两种形式的引用:左值引用和右值引用,万能引用不是一种引用类型,而是代表要么是左值引用要么是右值引用。1、万能引用用在需要推断类型的场合,即以下两种场合:a)用在模板template<typename T>void tempFun(T&& t) {} //模板类型的这种用法 T && 是万能引用最常见的使用场合b)auto推断类型auto&& var2 = var1; //auto这种需要推断类型的原创 2022-04-19 11:21:40 · 6623 阅读 · 1 评论 -
c++函数模板 不定参数
函数模板不定参数,记忆中c++ primer中的例子大概如下,用到包扩展://用于匹配递归结束void func(){ }template<typename T, typename... U> //这里的U可以是不同类型void func(const T& first, const U& ... args){ cout << first << endl; func(args...);//递归调用,最后一次args为空,调用特化func原创 2022-04-14 11:21:31 · 2326 阅读 · 0 评论 -
c++内存池
此代码可作为商业代码,在使用内存池的场合直接拿来使用,特此记录!// 分配内存池 嵌入式指针class allocatorPool{public: //分配 void *allocator(size_t size) { obj *tmplink; if (m_FreePos == nullptr) { //分配内存池 size_t i_realsize = i_sTrunkCount * size; m_FreePos = (obj*)malloc(i_rea原创 2022-04-12 15:59:48 · 1528 阅读 · 0 评论 -
c++ this指针
一、this指针引入我们知道类的大小是其普通成员变量(非静态)的大小,函数成员并不计入其中,这是因为,类中的成员函数其实就是全局函数,但缺必须用类对象来调用,这就是this指针的作用。class Base{public: //类成员函数bfun(),编译器会给其进行唯一命名并加入参数,并加入参数 //例如:xxxxBasexxxxbfun(Base* const, int) //其实也就是全局函数 void bfun(int m); int b_i;};//全局函数 编译器也会原创 2022-04-02 11:39:57 · 549 阅读 · 0 评论 -
c++类内存布局
一、普通继承1、先获取到对象a1的地址,通过地址查看内存,如下:可知内存布局如下:父类成员变量 子类成员变量 二、父类含有虚函数可见内存布局如下:虚函数表指针 父类成员变量 子类成员变量 三、虚基类虚继承的情况下,对象a1的大小为12字节,是因为前四字节是虚基表地址(区别于虚函数地址)。虚基表第二个四字节是虚基表变量的偏移量,即A1的内存地址:也就是说虚基表地址要偏移8个字节才能找打虚基类的变量虚基表地址 A1成员变量 ..原创 2022-04-01 11:51:06 · 1217 阅读 · 0 评论 -
c++ STL 算法一
以下常用算法,来自经典书籍<<STL源码解析>>。一、数值算法,标准库的仿函数一般用在此处。accumutate()累加、 inner_product()内积、 partial_sum()相加、 adjacent_difference()相差 ,这些算法只能用在数值上,所以头文件是<numeric>.另外还有mismatch().int main(){ //accumulate() inner_product() partial_sum() adja原创 2022-03-28 11:23:38 · 1197 阅读 · 0 评论 -
c++线程四
线程的知识已经讲解完毕,我们来实现一个线程池,以后工作可以直接拿来用。class threadPool{private: using Task = function<void()>; //自定义任务函数类型 int i_threadNum; //线程数量 vector<thread> threadVec; //线程数组 queue<Task> taskQueur; //任务队列 bool isTas原创 2022-03-23 16:11:33 · 866 阅读 · 0 评论 -
c++线程三
std::async() 、 std::package_task<> 、std::promise<> 、std::future<>、 std::shared_future<>一、async()可以看做package_task<>和promise<>的更高级应用他们的作用都是获取线程的返回值。我们前面所用的线程函数都是void类型的,但其实线程可以有返回值,当然我们可以用全局变量记录线程处理结果。1、async()函数是最原创 2022-03-22 10:06:44 · 1311 阅读 · 0 评论 -
c++线程二
接上篇!其实用mutex的lock()、unlock(), 当然更好用lock_guard(),这些基本能满足我们的应用需求,且容易理解。一、unique_lock 相比lock_gaurd有一些更灵活的用法主要体现在unique_lock的参数和成员函数上。如下一目了然,不再举例子。unique_lock<mutex> uniqeLock(mu, std::adopt_lock);//同lock_guard, 指示不加锁,前提是mutex已经加锁unique_lock<原创 2022-03-21 15:28:32 · 2129 阅读 · 0 评论 -
c++线程一
c++标准尚未支持多进程,但c++11后已开始支持多线程,我们终于可以用c++标准写多线程的跨平台程序了。一、线程函数thread.如下示例:这种情况线程入口函数的返回值一般是void,如果需要线程的计算结果可以用全局变量记录,或者参数用引用(但用引用时,线程detach()时特别容易出问题,见代码注释)。void mythread(int m){ cout << "---开始运行子线程:" << endl; cout << "---子线程id:"原创 2022-03-21 09:54:26 · 186 阅读 · 0 评论