![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
文章平均质量分 83
qq_20853741
这个作者很懒,什么都没留下…
展开
-
输出sprintf snprintf sprintf_s和输入scanf sscanf函数使用详解
输出函数sprintf snprintf sprintf_s和输入函数scanf sscanf函数使用详解原创 2023-02-04 11:03:14 · 7000 阅读 · 0 评论 -
gcc中预定义的宏__GNUC__ __GNUC_MINOR__ __GNUC_PATCHLEVEL__
gcc中预定义的宏__GNUC__ __GNUC_MINOR__ __GNUC_PATCHLEVEL__原创 2023-01-26 22:59:08 · 1536 阅读 · 0 评论 -
设置线程分离的方法
线程分离的设置方法(1)在创建线程thread_create函数参2时设置线程分离(2)创建完线程后,通过pthread_detach函数设置线程分离原创 2022-11-29 17:26:03 · 1555 阅读 · 1 评论 -
模板 template<typename T> 和 template<class T>区别
模板 template 和 template区别以及底层刨析原创 2022-07-19 20:13:53 · 6448 阅读 · 0 评论 -
operator new和operator delete操作符
operator new和operator delete操作符原创 2022-06-13 23:33:25 · 1008 阅读 · 1 评论 -
C++文件流fstream详细说明
C++文件流。首先需要包含头文件#include< fstream >fstream可以把它理解成一个父类,包含的子类有ifstream和ofstream等,fstream:文件输入输出类。表示文件级输入输出流(字节流);ifstream:文件输入类。表示从文件内容输入,也就是读文件;ofstream:文件输出类。表示文件输出流,即文件写。所以一般直接创建一个父类对象即可(即fstream类的对象)C++中seep()和seekg()函数功能seekg:设置输入文件流的文件流指原创 2022-05-28 22:29:01 · 9106 阅读 · 0 评论 -
C++ string 字符串函数详解
运算符重载+ 和 +=:连接字符串=:字符串赋值>、>=、< 和 <=:字符串比较(例如a < b, aa < ab)==、!=:比较字符串<<、>>:输出、输入字符串注意:使用重载的运算符 + 时,必须保证前两个操作数至少有一个为 string 类型。例如,下面的写法是不合法的:#include <iostream>#include <string>int main(){ string s..原创 2022-05-01 11:15:42 · 485 阅读 · 0 评论 -
VSCode C/C++无法跳转到定义、自动补全、悬停提示功能
无法跳转第一步首先这个C/C++ 这个插件你要有第二步打开 Extension settings,查看是否为default注意:这个时候前面的伏笔就来了,如果你装了 clang,你将无法把 C_Cpp:Intelli Sense Engine 开关设置为 Default,它会强制给你关掉,导致你配置不了 C/C++:Edit Configurations(JSON),也就不能进行调试跳转。 【解决方法】很简单,在插件栏里将 clangd 卸载、重启即可。..原创 2022-03-06 17:07:45 · 13234 阅读 · 7 评论 -
Redis 5.0 特性 Stream 实现源码分析-XREAD 消费流程
今天学习一下消费端的过程。redis stream的消费方法有几种, XREAD、XREADGROUP, 还有xrange/xrevrange, 后者比较简单,主要就是准备参数然后调用streamReplyWithRange 来根据范围读取消息内容。一、xrange 范围消息读取xrange 语法为:XRANGE key start end [COUNT < n> ]先来看一下xrange的代码,前面部分例行检查,获取start,end id范围。voidxra...原创 2022-01-13 19:25:20 · 1969 阅读 · 0 评论 -
C++ 多继承和多重继承
一、多重继承多重继承是一个类的父类也有父类,一层一层的继承父类。多重继承的对象初始化方式最高的父类到子类。A()–>B–>C()销毁时正好是初始化的反顺序。~C–>~B–>A()class A{};class B:public A{};class C:public B{};用子类初始化父类,为避免内存泄露,父类的构析函数最好用virtual 修饰。二、多继承多继承:一个子类拥有很多父类 ,一般指一个类有2个以上父类。多继承的定义:派生类的基..原创 2021-11-10 16:02:02 · 4542 阅读 · 0 评论 -
C++ 接口与实现相互分离的常见的两种方法
接口需求在软件开发这个行业中,一个较大的软件项目,一般由几个小组共同开发完成,为了将小组之间的影响降低到最低,定义好接口软件成为双方关注的焦点,对于要求在短时间开发完成的接口更是如此。那么如何才能定义好的接口呢? 第一,接口名字和实际的功能相符合;第二、接口要对数据进行封装,不允许客户直接操作接口之下的数据,尤其是使用new和delete在堆上操作内存数据。因为客户很容易由于操作不当造成错误,误以为是设计的接口有问题。接口与实现分离c++中实现对接口与实现进行分离有两种方法,一种是将对象的实现细原创 2021-11-10 11:17:36 · 1056 阅读 · 0 评论 -
友元函数和互为友元类
1、友元函数友元机制允许类授权其他函数直接访问类的private和protected成员。友元包括友元函数、友元类和友元成员函数。常用的是友元函数。友元函数的使用因为友元函数没有this指针,则参数要有三种情况:要访问非static成员时,需要对象做参数;要访问static成员或全局变量时,则不需要对象做参数;如果做参数的对象是全局对象,则不需要对象做参数.可以直接调用友元函数,不需要通过对象或指针友元函数和类的成员函数的区别1) 成员函数有this指针,而友元函数..原创 2021-11-03 22:11:27 · 1019 阅读 · 0 评论 -
C++11右值引用(一看即懂)
《C++11是什么》一节中提到,在 C++98/03 标准的基础上,C++11 标准对 C++ 语言增添了约 140 个新特性。本节要讲的右值引用就是众多新特性中的一个,同时也是最重要的特性之一。很多初学者都感觉右值引用晦涩难懂,其实不然。右值引用只不过是一种新的 C++ 语法,真正理解起来有难度的是基于右值引用引申出的 2 种 C++ 编程技巧,分别为移动语义和完美转发。本节先给读者讲解什么是右值引用以及它的基本用法,至于移动语义和完美转发则放到后续章节讲解。C++左值和右值右值引用可以..原创 2021-07-27 23:07:05 · 669 阅读 · 1 评论 -
派生类向基类传递参数
在定义类的时候,会遇到基类的构造函数带参数,而子类子类构造函数不带参数,这时候如果以代码 a 的方式建立派生类则会出错。代码 a:class A{ public: A(int x, int y):i(x),j(y){ } private: int i, j;};class B:public A{ public: B() { cout << "init B" << endl; }};在建立B类...原创 2021-07-01 21:22:55 · 1525 阅读 · 0 评论 -
2021-06-15
本文以 从机(服务器)的角度分析一下源码。同样的,我们以 modbus rtu 协议的 4x区保持寄存器功能进行举例说明。我们简单的写一下 modbus rtu 下 响应客户端(主机)读4x 区保持寄存器的伪代码流程:int main(void){modbus_t *ctx;modbus_mapping_t *mb_mapping;uint8_t *query;/* 创建并初始化 modbus_t 指针 */ctx = modbu...原创 2021-06-15 20:09:44 · 803 阅读 · 0 评论 -
四种必须使用构造函数初始化列表情况
1. 类成员为const类型2. 类成员为引用类型#include <iostream>using namespace std;class A{ public: A(int &v) : i(v), p(v), j(v) {} void print_val() { cout << "hello:" << i << " " << j << endl;} priva...原创 2021-05-24 21:24:03 · 981 阅读 · 0 评论 -
C++ STL中的set、指针数组和数组指针
“C++ STL中的set是如何实现的”。答案:一般是红黑树,编程题如下:定义一个Student结构体,包括name和age等数据,要求编程实现在set中查找一个name == "张三", age == 13的操作。#include <iostream>#include <set>using namespace std;/*Student结构体*/struct Student { string name; int age; string se...原创 2021-04-14 19:56:23 · 1292 阅读 · 0 评论 -
C++异常处理:logic_error、runtime_error
C++异常处理:logic_error、runtime_errorC++语言本身或标准程序库所抛出的所有异常,都派生自基类exception。这是其他数个标准异常类别的基类,它们共同构成一个类体系:这些标准异常类别分为三组:(1)语言本身所支持的异常此类异常用以支撑某些语言特性。主要包括:bad_alloc:new操作失败会抛出。bad_cast:执行期间加在一个引用上面的动态性型别转换操作失败时抛出。bad_typeid:执行RTTI时,交给typeid的参数为零或空指针时抛出bad_原创 2021-03-17 09:38:43 · 1865 阅读 · 0 评论 -
gcc编译和gdb调试和cgdb安装
gcc和g++的区别:先说一下相关概念:GCC : GNU Compiler Collection(GUN 编译器集合),它可以编译C、C++、JAV、Fortran、Pascal、Object-C、Ada等语言。gcc是GCC中的GUN C Compiler(C 编译器)g++是GCC中的GUN C++ Compiler(C++编译器)主要区别:1. 对于 *.c和*.cpp文件,gcc分别当做c和cpp文件编译(c和cpp的语法强度是不一样的);2. 对于 *.c和*.cpp文件原创 2021-03-14 22:33:59 · 564 阅读 · 0 评论 -
C++类对象的复制与赋值
本文主要介绍C++中类对象的赋值操作、复制操作,以及两者之间的区别,另外还会讲到“深拷贝”与“浅拷贝”的相关内容。本系列内容会分为三篇文章进行讲解。1 对象的赋值1.1 what如同基本类型的赋值语句一样,同一个类的对象之间也是可以进行赋值操作的,即将一个对象的值赋给另一个对象。对于类对象的赋值,只会对类中的数据成员进行赋值,而不对成员函数赋值。例如:obj1 和 obj2 是同一类 ClassA 的两个对象,那么对象赋值语句“obj2 = obj1;” 就会把对象 obj1 的数据原创 2021-02-20 22:28:48 · 5925 阅读 · 1 评论 -
C++ vector的reserve和resize区别
C++ vector的reserve和resize区别 vector 的reserve增加了vector的capacity,但是它的size没有改变!而resize改变了vector的capacity同时也增加了它的size!原因如下: reserve是容器预留空间,但在空间内不真正创建元素对象,所以在没有添加新的对象之前,不能引用容器内的元素。加入新的元素时,要调用push_back()/insert()函数。 resize是改变容器的大小,且在创建对象,因此,调...原创 2021-01-29 16:32:13 · 255 阅读 · 0 评论 -
C++ 接口与实现分离的两种方法
接口需求在软件开发这个行业中,一个较大的软件项目,一般由几个小组共同开发完成,为了将小组之间的影响降低到最低,定义好接口势在必行,如若要求短时间开发完成,定义好接口更是如此。或者说你的客户要求为其提供实现某个功能的接口,然后再在这些接口的基础上进行二次开发,如何定义才能定义好的接口呢? 第一,接口名字和实际的功能相符合;第二、接口要对数据进行封装,不允许客户直接操作接口之下的数据,尤其是使用new和delete在堆上操作内存数据。因为客户很容易由于操作不当造成错误,误以为是设计的接口有问题。接口与实原创 2021-01-17 20:28:03 · 511 阅读 · 1 评论 -
C++进制转化
/******************************数制转换部分**************************************///将十六进制转为二进制void Convertion_16_2(unsigned long long k, int Positive_Binary[]){ unsigned remainder;//余数 unsigned index = 64;//计数量 while (k != 0) { rem...原创 2021-01-11 11:22:06 · 105 阅读 · 0 评论 -
RSA解读
一、RSA算法历史1976年以前,所有的加密方法都是同一种模式: (1)甲方选择某一种加密规则,对信息进行加密; (2)乙方使用同一种规则,对信息进行解密。由于加密和解密使用同样规则(简称"密钥"),这被称为"对称加密算法"(Symmetric-key algorithm)。这种加密模式有一个最大弱点:甲方必须把加密规则告诉乙方,否则无法解密。保存和传递密钥,就成了最头疼的问题。1976年,两位美国计算机学家Whitfield Diffie 和 Martin Hellman,提出了一种崭新构思原创 2021-01-10 17:13:22 · 361 阅读 · 0 评论 -
boost库学习
一、boost库的简单介绍 boost是一个准标准库,相当于STL的延续和扩充,它的设计理念和STL比较接近,都是利用泛型让复用达到最大化。不过对比STL,boost更加实用。 STL集中在算法部分,而boost包含了不少工具类,可以完成比较具体的工作。 boost主要包含一下几个大类:字符串及文本处理、容器、迭代子(Iterator)、算法、函数对象和高阶编程、泛型编程、模板元编程、预处理元编程、并发编程、数学相关、纠错和测试、数据结构、输入/输出、跨语言支持、内存相关、语法分析、杂项。...原创 2021-01-09 22:50:45 · 1115 阅读 · 0 评论 -
RabbitMQ基础和原理
一、RabbitMQ基础知识一、背景 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现。AMQP 的出现其实也是应了广大人民群众的需求,虽然在同步消息通讯的世界里有很多公开标准(如 COBAR的 IIOP ,或者是 SOAP 等),但是在异步消息处理中却不是这样,只有大企业有一些商业实现(如微软的 MSMQ ,IBM 的 Websphere MQ 等),因此,在 2006 年的 6 月,Cisco 、Redhat、iMatix...原创 2020-12-30 15:15:46 · 129 阅读 · 0 评论 -
c/c++函数 -strtol strtoll strtoul strtoull解读
在项目开发时,字符串跟整形的转换是普遍需求的一个功能,在c/c++中常用的几个函数包括strtol strtoll strtoul strtoull。目前我们的项目里面进行转换的时候都是直接调用,对被转换的字符串是否有效,转换是否成功都没有一个基本的判断,一直想研究下,今天正好有空,仔细看了下linux man page中这几个函数的详细解释.声明#include <stdlib.h>long int strtol(const char *nptr, char **endptr,...原创 2020-12-23 15:34:10 · 2013 阅读 · 0 评论 -
C++语言的一些高级特性
摘要:本文结合自身的工作经验和学习心得,对C++语言的一些高级特性,做了简单介绍;对一些常见的误解,做了解释澄清;对比较容易犯错的地方,做了归纳总结;希望借此能增进大家对C++语言了解,减少编程出错,提升工作效率。一、导语C++是一门被广泛使用的系统级编程语言,更是高性能后端标准开发语言;C++虽功能强大,灵活巧妙,但却属于易学难精的专家型语言,不仅新手难以驾驭,即使是老司机也容易掉进各种陷阱。本文结合作者的工作经验和学习心得,对C++语言的一些高级特性,做了简单介绍;对一些常见的误解,做了解释原创 2020-12-22 11:03:50 · 569 阅读 · 0 评论 -
C++字符数组的索引为负值
C++字符数组的索引为负值#include <iostream>using namespace std;int main() { int x[1024]={0}; for(int i =0;i<1024;i++) { x[i] = i; } int * f = &x[10]; // f是一个指针,保存的是x[10]的地址 cout <<"f[-1]=" << f[-1] << endl; //结果是9,相当于把x原创 2020-12-21 15:26:20 · 2049 阅读 · 0 评论 -
size_t解读
size_t在C语言中就有了。它是一种“整型”类型,里面保存的是一个整数,就像int, long那样。这种整数用来记录一个大小(size)。size_t的全称应该是size type,就是说“一种用来记录大小的数据类型”。通常我们用sizeof(XXX)操作,这个操作所得到的结果就是size_t类型。因为size_t类型的数据其实是保存了一个整数,所以它也可以做加减乘除,也可以转化为int并赋值给int类型的变量。类似的还有wchar_t, ptrdiff_t。wchar_t就是wide char原创 2020-12-21 15:03:48 · 208 阅读 · 0 评论 -
C++单一继承和多继承
单一继承class A{public:virtual int foo( ) { return val ; }virtual int funA( ) {}private:int val ;char bit1 ;} ;class B : public A{public:virtual int foo( ) { return bit2; }virtual int funB( ) {}private:char bit2 ;};一个class只要有一个虚函数,那么.转载 2020-12-01 17:01:05 · 455 阅读 · 0 评论 -
TiXml使用详解+例子
TiXml简单使用TiXmlDocument doc("dummy.xml");if(doc.LoadFile()){ TiXmlHandle hDoc(&doc); TiXmlElement *pRoot; pRoot = doc.FirstChildElement("message"); printf("pRoot text: %s", pRoot->GetText());}TiXml复杂使用boolCTdaBuilder::L..原创 2020-12-01 11:10:43 · 1884 阅读 · 0 评论 -
静态成员函数的作用
静态成员函数主要为了调用方便,不需要生成对象就能调用。比如:class X{ public: void MethodA(); static void MethodB();}此时MethodB可以直接调用,X::MethodB();MethodA必须先生成类对象才能调用,X x; x.MethodA();函数的行为对所有派生类都一致时,可以声明为静态。静态成员函数的作用基本上相当于:一个带有命名空间的全局函数。如一个数学类定义了一些函数 都可以声明伪静态的 Ma...原创 2020-11-23 16:56:48 · 4346 阅读 · 1 评论 -
C++ string中的append函数
C++ string中的append函数1. append函数 常用的函数原型: basic_string &append( const basic_string &str ); basic_string &append( const char *str ); basic_string &append( const basic_string &str, size_type index, size_type len );...原创 2020-11-04 20:16:48 · 7156 阅读 · 0 评论 -
析构函数能直接被调用,而构造函数不能直接调用
析构函数能直接被调用,而构造函数不能直接调用在进行面向对象程序设计的时候,我们经常要设计自己的类,我们就要好好设计自己需要的构造函数和析构函数,那么我们可以通过指针直接调用构造函数和析构函数吗?进行验证:#include <iostream>using namespace std;//程序说明直接调用构造函数会出现错误,直接调用析构函数是成功的。class A{ public: int id;...原创 2020-10-29 10:02:40 · 1601 阅读 · 0 评论 -
#pragma region与#pragma endregion一对预处理指令,折叠特定的代码
#pragma region 是Visual C++中特有的预处理指令,也是一个Visio Studio Code Editor中的命令,来定义可以扩展和收缩的代码区域的开头和结尾,可以用来收缩或者展开一段代码。从而使界面更加清洁,便于编辑其他代码。折叠后的代码块不会影响编译。你也可以随时展开代码块以进行编辑等操作。注意:pragma endregion 标记代码段的结束,一个#region必须以#pragma endregion结束。格式:#pragma region name/********原创 2020-10-27 11:46:21 · 1213 阅读 · 0 评论