随笔分类 - C/C++编程
C++ std::Recursive_mutex 支持 “对同一互斥量进行嵌套加锁”
摘要:使用场景:一个类的不同成员函数之间,存在相互调用的情况, 如果这样的成员函数作为线程的入口函数时,就会出现在成员函数 func1()中对某个互斥量上锁,并且, func1()中调用了成员函数 func2() ,实际上 func2()为了保护成员数据,func2()内部也对同一个互斥量上锁。 在我们对
阅读全文
采用C++17新标准 “共享锁”和“独占锁”更低消耗更好性能地保护不常更新的共享数据
摘要:用到的标准库: std::shared_lock<>、 std::shared_mutex、 std::lock_guard<>。 另外还有 std::shared_timed_mutex(此处不讲)。 分析:对于保护不常更新的共享数据, 因为写只是很偶然的发生,更频繁的是读取。如果不区分 “读者”
阅读全文
双重检查锁--声名狼藉, 臭名昭著
摘要:双重检查锁模式,是经常听到和用到的方式,既保护了数据的初始化过程,也避免了每次访问时,多个线程要序列化的检查锁问题。 不过,又有观点说,双重检查锁模式是声名狼藉,是臭名昭著的。下面我们通过例子来分析论证。直接贴代码,附上执行结果,我们先看效果,再做分析。 1 xxx.h 2 3 #include <
阅读全文
C++ / Qt 循环关键字 的明晰
摘要://简要介绍: /* * 使用C++和Qt大家都知道 循环的关键字C++有 for ,智能for, Qt 有foreach。 * 用来循环QMap这种存放键值对的类型的时候,对于智能for和Qt的foreach的循环变量针对的是什么,小熊博士总是含糊,使用起来不清晰。 */ QMap<int, QS
阅读全文
Debug模式下不崩溃, Release模式下偶尔发生崩溃的解决思路
摘要:资料整合于各网友大佬。 debug和release两种编译模式的区别: debug和Release的区别 深入了解Debug 和Release 调试release版本的方法: 1. 使用弹出对话框的方法,确定是哪里出错了,然后再查看问题。此方法是笨方法,适用于新手,可以解决一些问题,但是只能定位,无
阅读全文
《C++ primer 第五版》读书笔记
摘要:《C++ primer 第五版》 读书笔记一、动态内存与智能指针 1、shared_ptr自动销毁所管理的对象。 shared_ptr的析构函数会递减它所指向的对象的引用计数。如果引用计数变为0,shared_ptr的析构函数就会销毁对象,并释放它占用的内存。 2、shared_ptr会自动释放相关
阅读全文
小端存储转大端存储 & 大端存储转小端存储
摘要:1、socket编程常用的相关函数:htons、htonl、ntohs、ntohl h:host n:network s:string l:long 2、基本数据类型,2字节,4字节,8字节的转换如下: int main(){ transformBigToLittleEndian(); int va
阅读全文
C++判断计算式是大端存储模式,还是小端存储模式
摘要:小端存储:数据的低字节存储在地址空间的低字节位,数据的高字节存储在地址空间的高字节位。 大端存储:数据的低字节存储在地址空间的高字节位,数据的高字节存储在地址空间的低字节位。 判断计算机是小端还是大端的核心点: 1、取出int类型低字节存于char,对比取出的低位存放的数据跟整个int类型数据的值。
阅读全文
sizeof 计算 struct 占字节数的方法总结
摘要:矛盾焦点: 1、结构体的内存对齐方式 字节对齐的目的: 1、提高CPU存储变量的速度 计算的核心点(默认对齐方式): 1、结构体内的每一个成员的起始地址跟结构体起始地址的偏移量要刚好是自己字节数的整数倍,不足则自动填充。 2、结构体总的字节大小要刚好是结构体的字节边界数的倍数,不足则自动填充。(字节
阅读全文
C/C++ 交换两个数,不使用第三个变量, 函数模板来实现
摘要:#include template void exchangeTwoNumber(T &t1, T &t2);void test(); int main() { int a = 10, b = 20; double q = 10.1, w = 20.2; char z = 'z', x = 'x'; std::cout void exchangeTwoN...
阅读全文
C++ 派生类覆盖重载基类函数
摘要:派生类希望基类重载函数可见,情况有三种: a)派生类中覆盖某个版本,则某个版本可见,全部都覆盖重写,则全部版本可见。 b)派生类中一个也不覆盖,则全部基类版本可见。 c)派生类需要添加新的重载版本,同时又需要可见基类的重载版本,此时并不是必须全部覆盖重写全部版本。可在派生类中用using声明基类重载
阅读全文
C++ new delete 一维数组 二维数组 三维数组
摘要:h----------------------------- #include "newandmalloc.h" #include using namespace std; newAndMalloc::newAndMalloc() { cout using namespace std; newAndMalloc::newAndMalloc() { cout #include...
阅读全文
C++ 重写虚函数的代码使用注意点+全部知识点+全部例子实现
摘要:h-------------------------- #ifndef VIRTUALFUNCTION_H #define VIRTUALFUNCTION_H /* * 派生类中覆盖虚函数的使用知识点 * 1、返回值必须相同。 一个特例,返回值为本类类型的引用或指针,且可转为基类类型。 * 参见: * ...
阅读全文
计算GPS点之间的距离
摘要:latitude纬度 longtitude经度 // 求弧度 double getRadian(double d) { return d * PI / 180.0; //角度1? = π / 180 } //计算距离 米 double getDistance(double lat1, double lng1, double lat2, double lng2) { do...
阅读全文
C++ Windows API 读写INI文件
摘要:BOOL WritePrivateProfileString( LPCTSTR lpAppName, // INI文件中的一个字段名[节名]可以有很多个节名 LPCTSTR lpKeyName, // lpAppName 下的一个键名,也就是里面具体的变量名 LPCTSTR lpString, // 键值,也就是数据 LPCTSTR lpFileName // INI文...
阅读全文
VC++运行库 集32位/64位整合版
摘要:运行程序时,win7/win10(x86和x64)常会遇到缺少什么缺少msvc***.dll问题 安装下面链接提供的程序,安装后,便可解决。 【2016-10-10】Microsoft Visual C Redistributable.exe 百度搜索下载就可以了。 exe说明: VC++运行库一键
阅读全文
RSA加解密 私钥加密公钥解密 私加公解 && C++ 调用openssl库 的代码实例
摘要:前提:秘钥长度=1024 对一片(117字节)明文加密 私加 对一片(128字节)密文解密 公解 对整体 明文加密 私加 对整体 密文解密 公解 附1:rsa 公加私解 附2:C++ 使用openssl库实现 DES 加密——CBC模式 && RSA加密——公加私解——私加公解
阅读全文
RSA加解密 公钥加密私钥解密 公加私解 && C++ 调用openssl库 的代码实例
摘要:前提:秘钥长度=1024 对一片(117字节)明文加密 对一片(128字节)密文解密 注:工作中只用到了 rsa私加公解,因此没有 针对全部明文的公加私解的代码实现,请参考附录。 附:rsa 私加公解
阅读全文
rsa 加密 pkcs#1格式秘钥的格式化
摘要:C++调用openssl库生成的秘钥对,通过传输传出来的只有秘钥的内容,没有秘钥的格式。而我们在调用openssl库加密解密时,传入的秘钥是需要包含格式的。C++调用openssl库需要的格式为pkcs#1, java默认的格式为pkcs#8。 下面的代码,仅仅是添加收尾标识,并非对密匙内容做转换。
阅读全文
C++调用openssl库生成RSA加密秘钥对
摘要:直接上代码。默认生成的是pkcs#1格式 附1:C++ 使用openssl库实现 DES 加密——CBC模式 && RSA加密——公加私解——私加公解
阅读全文