随笔分类 - C++
摘要:对齐是个比较难理解的问题,如果弄懂了一段时间后可能又忘了,不如直接取消对齐,相关配置代码如下: #pragma pack (n) // 编译器将按照n个字节对齐;#pragma pack() // 恢复先前的pack设置,取消设置的字节对齐方式#pragma pack(pop)// 恢复先前的pac
阅读全文
摘要:一、简介 在项目中经常遇到这样的工作:接收报文数据,根据协议按字节、位解析,将解析结果在界面显示、存储数据库、直接判断..不同的项目协议不同,往往需要程序员每次针对协议重新编写代码,即使步骤完全一样。合格的程序员,或者说正常的程序员肯定不会重复造轮子,本人惭愧,重复造了两年的轮子,幸好浪子回头金不换
阅读全文
摘要:1、 在includes.h中定义,应该是全局函数,作用是打印入参: template<typename T> void record(T info) { qDebug()<<info; } 可根据不同平台修改打印函数,这里是Qt平台,使用的是qDebug,也可以C++的std::cout 使用:
阅读全文
摘要:一、final 1、final用于让虚函数不可被重写 struct B2 { virtual void f() final {} // final 函数 };2 struct D2 : B2 { virtual void f() {} }; 如上代码是不可被编译过的 2、放在类后面,如果类被继承则编
阅读全文
摘要:class A{ private: int a; //变量,属于对象任何地方初始化即可 const int b = 0; //常量,属于对象,声明的时候初始化、在构造函数初始化列表初始化,最后取初始化列表的值 static int c; //静态变量,属于类,需要在类外声明一次,初始值可给可不给 static const int d; //非浮点静态常量,属于类,static和const位置都可以
阅读全文
摘要:1、栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区,里面的变量通常是局部变量、函数参数等。 2、堆,就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动
阅读全文
摘要:1、对象分布图 2、解析 每个类的大小只有其成员变量大小,其中包括:类成员属性,虚函数指针; 而其他没有如:静态变量【静态区】,普通函数、静态函数【代码区】 3、总结 类对象的sizeof只包含成员变量的大小,不包含函数的大小【就跟结构体一样】,因为函数被放在了代码区,类对象调用代码的时候会把对象的
阅读全文
摘要:优点: 1.inline 定义的类的内联函数,函数的代码被放入符号表中,在使用时直接进行替换,(像宏一样展开),没有了调用的开销,效率也很高。 2.很明显,类的内联函数也是一个真正的函数,编译器在调用一个内联函数时,会首先检查它的参数的类型,保证调用正确。然后进行一系列的相关检查,就像对待任何一个真
阅读全文
摘要:满足下面条件: 1、类中没有定义任何的成员变量 2、所有的成员函数都是公有的 3、所有的成员函数都是纯虚函数 4、接口是一种特殊的抽象类
阅读全文
摘要:浅拷贝,当类对象调用编译器默认的拷贝构造函数和赋值运算符重载函数的时候,仅将待复制对象各个数据成员的值对应复制过来。深拷贝,通过程序员的重写编写拷贝构造函数和赋值运算符重载函数,让对象中动态成员,重新动态分配空间。【即指针重新指向另一个堆】 举例: 浅拷贝的危害【当有指针的时候就体现出来了】: us
阅读全文
摘要:代码: #include <iostream> #include <stdio.h> #include <QDebug> using namespace std; class A { public: A() { qDebug() << "默认无参构造函数"; } #if 0 explicit A(i
阅读全文
摘要:个人整理,借鉴网络 1、C和C++中struct的区别 1)、C的struct无protect和private属性,C++的有 2)、C不能定义函数,C++能 3)、C中struct加了typedef才能定义成类型,C++不需要 2、C++中的 struct 和 class 有什么区别? 1)、st
阅读全文
摘要:不管是普通函数、静态函数、全局函数..每个线程都会在自己的线程栈区复制一份这个函数,所有可以随意使用,线程安全。 但是需要注意的是,如果这些函数内部对全局、静态变量进行了访问或修改,则不是线程安全的,需要线程加锁互斥。
阅读全文
摘要:一、线程互斥 如果多个线程需要访问且可能修改同一个变量,那么需要加锁,保证同一时刻只有一个线程可以访问,这个动作即最小“原子操作” 方式1: 使用c++提供的类mutex,lock,unlock即可保证线程同步 #include <mutex>mutex mx; int haha(){ mx.loc
阅读全文
摘要:如果我们new出来的指针是一个基本类型,没什么关系,内存还是会被释放的,但是如果是一个类对象指针,在处理过程中转成了void*,那就有问题了,析构函数将不会被调用。 故new的指针类型要和delete的指针类型要保持一致。 如下所示: object* p=new object[10]; void*
阅读全文
摘要:转自:https://www.cnblogs.com/1Kasshole/archive/2018/07/28/9382828.html
阅读全文
摘要:0、概述格式:[capture](parameters) mutable ->return-type{statement} 也就是所谓的匿名函数 1、简单格式 auto f = [] { std::cout << "this is lambda" <<std::endl; } f(); 2、直接调用
阅读全文
摘要:1、模板类queue,包含头文件<queue>中,是一个FIFO队列。 queue.push():在队列尾巴增加数据 queue.pop():移除队列头部数据 queue.font():获取队列头部数据的引用... 2、Qt库的线程池,QThreadPool QThreadPool.setMaxTh
阅读全文