
c++
文章平均质量分 83
致守
这个作者很懒,什么都没留下…
展开
-
预编译中RHS和LHS的概念和区别
LHS。转载 2025-03-31 18:09:26 · 53 阅读 · 0 评论 -
C++ STL move_iterator移动迭代器(深入了解,一文学会)
C++ 11 还为 STL 标准库增添了一种迭代器适配器,即本节要讲的 move_iterator 移动迭代器适配器。move_iterator 迭代器适配器,又可简称为移动迭代器,其可以实现以移动而非复制的方式,将某个区域空间中的元素移动至另一个指定的空间。本文作者原创,转载请附上文章出处与本文链接。转载 2025-03-31 16:53:45 · 25 阅读 · 0 评论 -
C语言指针进阶(一)——深入详解“函数指针”与“指针函数”
1.1 函数指针//注意:这里的括号不能掉,因为括号()的运算优先级比解引用运算符*高这个函数的类型是有两个整型参数,返回值是个整型。对应的函数指针类型对应的函数指针定义://参数名可以去掉,并且通常都是去掉的。这样指针p就可以保存函数类型为两个整型参数,返回值是整型的函数地址了。我们一般可以这么使用,通过函数指针调用函数:a : b;//定义一个与maxValue兼容的指针p(20, 45);//通过指针调用1.2 指针函数。转载 2025-03-18 19:56:18 · 113 阅读 · 0 评论 -
一篇文章搞懂http协议(超详细)
HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写。HTTP协议用于从WWW服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。HTTP是一个无状态的协议。HTTP是一种用作获取诸如 HTML 文档这类资源的协议。转载 2025-03-07 21:28:07 · 734 阅读 · 0 评论 -
C++条件变量唤醒问题 & notify_one() 唤醒不及时问题
noyify_all能够让所有的等待线程感知,所以能够直接选出来获得锁的。因为我对于 C++中条件变量的等待唤醒部分、的区别方面有些疑点,因此就有了以下的同。的沟通,希望同样能够帮助到大家。转载 2025-03-07 21:26:19 · 42 阅读 · 0 评论 -
服务端主动关闭连接,如何确保对端能够收到全部的数据?
首先发送数据是调用的。转载 2025-03-07 21:23:49 · 35 阅读 · 0 评论 -
C++的字面量运算符重载literal operator
【代码】C++的字面量运算符重载literal operator。转载 2025-03-07 21:20:57 · 24 阅读 · 0 评论 -
cpp-httplib用法入门
但是对使用者来说,在linux平台,httplib要求gcc必须高于4.8,像centos7环境必须升级gcc。解压压缩包,可以看到所有的代码都包含在httplib.h这个头文件中,httplib本身是无须编译的。在windows平台,httplib要求vs至少是2015以上,或者qt版本5.9以上。此外,如果需要使用HTTPS,httplib还依赖openssl 1.1.1。将httplib.h拷贝到工程目录,或者配置好头文件依赖,按F7编译。下面用一个简单的例子,说明在linux、vs、qt如何使用。转载 2025-03-05 21:34:05 · 55 阅读 · 0 评论 -
C++并发编程的高级接口:async() 和 Futures
作为一名程序员,我们必须确保f的生命周期(注意是f,而不是它引用的共享状态)不小于已启动的线程。例如在如下代码中,我们在当前线程中修改变量c,而在另一个异步线程(std::async启动的后台线程)中读取c,这是一个非同步的并发访问,会出现所谓的数据竞争,结果是未定义的,除非使用互斥锁或原子变量进行同步。如果当前有一个线程可用,则会异步启动,但如果没有线程可用或者系统环境不支持多线程,调用将被推迟,直到明确表示需要它的结果(调用get())或只是希望传递的可被调用对象完成(调用wait())。转载 2025-03-05 21:33:01 · 27 阅读 · 0 评论 -
《深入理解C++类型转换:探索 static_cast、reinterpret_cast、dynamic_cast 和 const_cast》
在C++编程中,类型转换是一项基础而强大的特性,允许开发者在不同数据类型间转换和操作数据。本文将详细分析C++的四种类型转换:static_cast、reinterpret_cast、dynamic_cast 和 const_cast。通过精心设计的示例和深入讲解。强调理解这些转换只是改变了编译器对地址解释的方式,而非创建或转换实际对象。加深您对C++类型转换的理解。转载 2025-03-05 21:31:01 · 53 阅读 · 0 评论 -
C++14::lambda函数的类型
auto 自动类型推导关键字隐去了一切有关对象类型的信息,通过typeid关键字我们可查阅一般对象(甚至是函数指针)的类型信息。Lambda的类型,是个不具名function object(或称functor)。除了能得到两个对象均是lambda函数外,无法通过typeid关键字获得额外的信息。转载 2025-03-05 21:29:37 · 18 阅读 · 0 评论 -
httplib库的使用(支持http/https)(一)
httplib库是一个以C++11特性编写的库,所以编译器也需要能支持C++11的。库在使用时只需包含一个头文件即可,非常方便。下载地址注意:此库为线程阻塞,使用时还请注意。转载 2025-03-05 21:25:30 · 101 阅读 · 0 评论 -
cpp-httplib 源码剖析
cpp-httplib是一个c++封装的http开源库,仅包含一个头文件,不过代码行数达到8000多行,相比于上一节中讲述的Tinyhttpd ,该库功能就比较完善,并且可以在简单的项目中使用。cpp-httplib 服务端采用select IO多路复用模型,工作的处理方式,主要包含的类Server、Client、Request、Response。上述进行简单的举例,方便掌握处理流程。借助该库还可以实现http推送功能,更多应用可以参考库中自带的例子。转载 2025-03-05 21:22:59 · 37 阅读 · 0 评论 -
第三方库httplib的使用
回调函数是上面介绍的请求和响应结构体,在使用的时候可以定义一个void(const Request &, Response &)类型的函数进行传入,httplib会自动调用对应方法。通过MultipartFormData 结构中包含了name,用于区分每个MultipartFormData的名字,content是文件的主要内容,filename是文件原本的名字,content_type的上传文件的类型。转载 2025-03-04 09:27:37 · 60 阅读 · 0 评论 -
简单的 curl HTTP的POST&GET请求以及ip port连通性测试
100 Continue 是 HTTP/1.1 中的一种状态码,表示服务器已经收到了请求头,并且客户端应该继续发送请求体。端口直接进行登录,另一个为我们使用网关接口,进行登录转发到登录系统,进行登录操作。,项目部署完成后我们需要进行项目后端接口的测试功能,但是由于客户那边么有条件安装类似于。注意:我们测试环境密码校验部分已经注释,可以随意填写,所以测试密码为随机填写。我们使用curl 进行测试接口,接口使用网关接口,首先我们使用。我们测试的登录一共有两个接口,其中一个是我们。命令来模拟登录接口的登录测试。转载 2025-03-04 09:26:36 · 154 阅读 · 0 评论 -
3-1 HTTP全解(IP、端口port、域名、URL、curl命令)
1.前言HTTP:超级文本传输协议protocol:协议、礼节、入门李爵士发明的三样东西:WWW=URL+HTTP+HTML。转载 2025-03-04 09:21:10 · 56 阅读 · 0 评论 -
【Postman】Postman模拟服务(mock)使用教程
这样我们就得到了一个mock server的地址,也就是说,这个mock server是postman在自己的服务器上为我们创建的,只要我们打开postman,我们都可以直接用这个地址来访问mock的API。点击下图中的Example,在出现的界面内点击“Add Example”,就会创建一个该Request的一个Response。点击新创建的测试用例旁边的箭头,再点击“Mocks”,在切换出的界面中,点击“Create a mock server”。”,选择“Add Request”添加请的请求。转载 2025-03-04 09:19:21 · 101 阅读 · 0 评论 -
安装boost的regex模块
参考:http://onlamp.com/pub/a/onlamp/2006/04/06/boostregex.html?boost是c++下的强大的library库,本文讲一下怎么安装boost的正则表达式模块。建议用静态链接库,不然的话你还得再运行的机器上再单独安装boost的regex模块。现在回在/usr/local/regex下生成动态和静态的链接库。1:下载boost源文件。解包后进入到根目录。翻译 2025-02-28 22:05:24 · 21 阅读 · 0 评论 -
正则大全,一定有你需要的,进来搜
(Regular Expression,简称regex或regexp)是编程中一个非常强大的工具,它用于匹配字符串中字符的组合。今天,我将为大家总结100个常用的正则表达式。这些正则表达式涵盖了各种常见的匹配需求,但请注意,正则表达式可能因具体需求而有所调整。在实际应用中,建议根据具体情况进行测试和优化。转载 2025-02-28 16:41:37 · 140 阅读 · 0 评论 -
c++11 读写锁实现
2. 对于更老的代码(c++11之前,没有conditional_variable),可能需要根据。3. 补充一个windows下的信号量。在一些读多写少的业务场景下,转载 2025-02-27 17:57:33 · 28 阅读 · 0 评论 -
出现GDB No symbol “xxx“ in current context的几种原因分析
编译的时候,如果使用了-g选项,GCC4.8及其以上的版本默认使用-gdwarf-4 -fno-debug-types-section选项,也就是使用DWARF4调试信息格式。如果gdb的版本只支持DWARF2或者DWARF3,在使用gcc编译的时候可以使用-gdwarf-2或-gdwarf-3选项来指定调试信息格式,已和gdb保持一致。建议编译的时候使用-g选项的时候,同时使用-Og可以关闭编译优化(-O选项较低gcc版本不支持)。2、编译的可执行程序的调试信息格式与GDB所支持的不一致。转载 2025-02-25 21:32:25 · 124 阅读 · 0 评论 -
图说C++对象模型:对象内存布局详解
文章较长,而且内容相对来说比较枯燥,希望对C++对象的内存布局、虚表指针、虚基类指针等有深入了解的朋友可以慢慢看。本文的结论都在VS2013上得到验证。不同的编译器在内存布局的细节上可能有所不同。文章如果有解释不清、解释不通或疏漏的地方,恳请指出。这篇文章主要来讨论C++对象在内存中的布局,属于第二个概念的研究范畴。而C++直接支持面向对象程序设计部分则不多讲。虚函数表解析。含有虚函数或其父类含有虚函数的类,编译器都会为其添加一个虚函数表,vptr,先了解虚函数表的构成,有助对C++对象模型的理解。转载 2025-02-25 21:30:39 · 41 阅读 · 0 评论 -
using 的三大作用汇总
using到底是干嘛的?using的功能总有一种覆盖面广的感觉,似乎并没有特定的功能。其实using的功能主要可以总结为两个 “引入”、一个 “别名”。其中两个引入是指和,一个别名是指。但实际上又并非这么简单,using在类中又被赋予了更多的意义,本文将就上面讲到的这些内容作整理总结。转载 2025-02-25 15:47:50 · 16 阅读 · 0 评论 -
C++内存管理:shared_ptr/weak_ptr源码(长文预警)
本文主要讲述c++提供的shared_ptrweak_ptr和,以及详解MSVC中STL提供的智能指针源码。转载 2025-02-23 21:41:10 · 70 阅读 · 0 评论 -
share_ptr循环引用产生原因及其解决方案
根据之前的分析可知,前三句代码执行完后,Person对象的引用计数为1,Car对象的引用计数为2。根据代码执行顺序,share_ptr指针指向new创建的一个Person对象,也就是图中栈空间的person指针指向了堆空间的Person对象,引用计数为1,同理,car指针也指向了堆空间的Car对象,引用计数亦为1。接下来,Person对象里的成员m_car指向Car对象,Car对象的引用计数加1后为2,Car对象的m_person也指向Person对象,Person对象引用计数也加1为2。转载 2025-02-23 21:39:19 · 56 阅读 · 0 评论 -
weak_ptr弱引用智能指针详解
这个指针天生一副小弟的模样,也是在C++11的时候引入的标准库,它的出现完全是为了弥补它老大天生有缺陷的问题。相比于上一代的智能指针来说,新进老大可以说近乎完美,但是通过引用计数实现的它,虽然解决了指针独占的问题,但也引来了引用成环的问题,这种问题靠它自己是没办法解决的,所以在C++11的时候将和一起引入了标准库,用来解决循环引用的问题。什么是循环引用的问题呢?在shared_ptr的使用过程中,当强引用计数为0是,就会释放所指向的堆内存。那么问题来了,如果和死锁一样,当两个shared_ptr互相引用,那转载 2025-02-23 21:38:04 · 29 阅读 · 0 评论 -
C++ httplib 解读1
解读:Request 中定义了请求的方法,路径,还有 header,而header的类型是mulitmap<string,stirng> 的,然后此处使用了一个send函数,内部对request response 形成了一个封装,还有就是url中的params 是自己添加到path里面的,当然还有使用了params的重载类型,这里就不讲了。解读:这个函数里面就是具体的系统API调用了,intf 字面意思是网络接口,我的理解就是某个网卡,不指定网卡使用默认网卡时,就不用bind,否则还需要bind。转载 2025-02-20 16:43:44 · 33 阅读 · 0 评论 -
C++11 auto、decltype、is_reference、is_rvalue_reference/is_lvalue_reference、typeid
【代码】C++11 auto、decltype、is_reference、is_rvalue_reference/is_lvalue_reference、typeid。转载 2025-02-20 16:42:30 · 28 阅读 · 0 评论 -
[C++] 枚举enum的用法:举例讲解 enum 和 enum class差异
enum class 提供更好的类型安全和作用域控制,适合更复杂的代码场景,而传统的 enum 更加简洁,但可能带来类型不安全的隐患。示例对比:/**** 使用enum ****/// 不需要加命名空间// 可以隐式转换为整数if (value == 1) { // 直接与整数比较// .../**** 使用enum class ****/// 必须加命名空间前缀// 需要显式转换if (value == 1) { // 与整数比较时需要转换// ...转载 2025-02-20 16:41:13 · 31 阅读 · 0 评论 -
cpp-httplib 避免阻塞主线程, c++封装httplib,httplib面向对象开发
~~~~~~~ - cpp-httplib是一个简单易用, 跨平台, 开发快速, 仅头文件的c++ http库, 只需要把一个头文件包含到你的代码里, 就可以用很少的代码完成一个http server, 但它仍有一些不足之处, 比如会阻塞你的主线程(cpp-httplib的github地址~~~~~~~~ - 在不影响cpp-httplib原生代码的基础上, 对其进行了进一步的封装, 且完全和httplib解耦~~~~~~~~ - 封装类为。转载 2025-02-20 16:38:52 · 29 阅读 · 0 评论 -
面试题:每发送一个http请求就要建立一个tcp连接吗(非持久连接/持久连接)
我们知道 Header 中 Connection 属性决定了连接是否持久,HTTP/1.0 中 Connection 默认是 close 的,即每次请求都会重新建立和断开 TCP 连接,而在 HTTP/1.1 中 Connection 默认是 keep-alive 的,即连接可以复用,不用每次都重新建立和断开 TCP 连接。那浏览器就会在一个 HOST 上建立多个 TCP 连接,连接数量的最大限制取决于浏览器设置,这些连接会在空闲的时候被浏览器用来发送新的请求,如果所有的连接都正在发送请求呢?转载 2025-02-20 16:29:58 · 63 阅读 · 0 评论 -
cpp-httplib的下载和使用
(也称为httplib)是一个基于C++的轻量级HTTP框架,它提供了简单易用的API,用于创建HTTP服务器和客户端。并且是采用的select多路复用+线程池的方式响应请求,读取请求,放到业务线程池对于业务处理,同时还支持切换多路复用的方式。默认情况下,由于其广泛的支持,使用了select系统调用。如果你希望使用poll,可以通过设置实现。本篇章是在原作者的基础上稍加上了我自己的对源码的理解,具体细节请看原作者。转载 2025-02-20 15:58:59 · 45 阅读 · 0 评论 -
谈谈完美转发(Perfect Forwarding):完美转发 = 引用折叠 + 万能引用 + std::forward
写在前面是一个比较简单,却又比较复杂的东西。简单之处在于理解:C++为什么需要完美转发?复杂之处在于理解:完美转发基于以及模板函数。本文将会结合GCC源码,详细解读完美转发的动机和原理。转载 2025-02-19 14:03:31 · 39 阅读 · 0 评论 -
C++ extern
file02.cpp使用的是file01.cpp中定义好的cats 和dogs,在file01.cpp可以不使用extern关键字,但是在file02.cpp中不使用extern关键字则这些 外部声明会变成定义。而且还会违反单定义规则。如果要在多个文件中使用外部变量,只需在一个文件中包含该变量的定义(ORD),但在使用改变量的其他所有文件中,都必须使用extern声明这个变量。(referencing declaration)简称为声明,它不给变量分配空间,因为它引用已有变量。在全局变量中,引用声明使用。转载 2025-02-19 12:58:16 · 16 阅读 · 0 评论 -
std::decay退化指针
对于退化大于一维的指针类型,我们首先想到递归,再结合一下模板元编程类的特化和继承的trick,可以这样写(如果觉得std::xxx<T>::type写起来比较烦,可以打开c++17, 用std::xxx_t<T>替换std::xxx<T>::type,用std::xxx_v<T>替换std::xxx<T>::value),直到remove_pointer_decay<T>类型与T类型完全相同时调用true偏特化版本,在true偏特化版本中定义type方便调用...所有的。类型(T**)无能无力...转载 2025-02-19 09:10:01 · 23 阅读 · 0 评论 -
C++11的std::is_same和std::decay使用与源码解析
本文先是介绍了C++11新增的和std::decay这两个模板类的作用与使用方法,然后通过对源码进行分析,我们知道了这两个模板类的实现其实并不复杂,都是借助了模板特化机制来实现的,其实不止这两个,C++标准库的文件里面的内容基本都是使用类似的方法来实现的。C++11的std::is_same和std::decay使用与源码解析_std::decay源码分析-优快云博客。转载 2025-02-19 09:08:59 · 21 阅读 · 0 评论 -
理解C++可变参数模板的几种展开方式
可变参数模板(variadic templates)是C++11新增的强大的特性之一,它对模板参数进行了高度泛化,能表示0到任意个数、任意类型的参数。相比C++98/03这些类模版和函数模版中只能含固定数量模版参数的“老古董”,可变模版参数无疑是一个巨大的进步。如果是刚接触可变参数模板可能会觉得比较抽象,使用起来会不太顺手,使用可变参数模板时通常离不开模板参数的展开,所以本文来列举一些常用的模板展开方式,帮助我们来对可变参数模板有一个初步的了解。可变参数模板和普通模板的定义类似,在写法上需要在。转载 2025-02-19 09:07:28 · 56 阅读 · 0 评论 -
三、非类型模板参数(Nontype Template Parameters)
1、模板参数不仅仅可以是类型(type),还可以是值(value)2、不能把float,class-type类型的对象,内部链接(internal linkage )对象,作为非类型模板参数。三、非类型模板参数(Nontype Template Parameters)-优快云博客。转载 2025-02-19 09:06:30 · 21 阅读 · 0 评论 -
C++模板(template)详解教程(很多代码示例)
函数模板背景:比如我们需要来比较不同数据类型的两个值,并指出第一个值与第二个值的大小关系,如果此时只定义只比较一种参数类型的函数,略显麻烦。此时引出了函数模板此时就不用为每个类型定义一个新的函数了。比如:return 0;模版定义:以关键字template开始,后跟一个模板参数列表,这是一个逗号分隔的一个或多个模板参数的列表,用小于号(<)和大于号(>)包围起来。实例化private:T1 first;T2 second;转载 2025-02-19 09:02:01 · 295 阅读 · 0 评论 -
突破编程_C++_C++11新特性(完美转发 forward)
std::forward 是 C++11 中引入的一个模板函数,主要用于在模板函数或模板类中实现参数的完美转发(perfect forwarding)。完美转发是指函数或类模板可以将其参数原封不动地转发给另一个函数或类模板,同时保持被转发参数的左右值特性(lvalue 或 rvalue)。这里,T 是一个模板参数,它代表了需要被转发的参数的原始类型。std::remove_reference<T>::type 是一个类型特性,用于从 T 中移除引用,从而得到原始类型。转载 2025-02-19 08:58:41 · 63 阅读 · 0 评论