
c++
文章平均质量分 83
致守
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
云原生虚拟化:一文读懂网络虚拟化之 tun/tap 网络设备
从上图可以更直观的看出 tun/tap 设备和物理设备的区别:虽然它们的一端都是连着网络协议栈,但是物理网卡另一端连接的是物理网络,而 tun/tap 设备另一端连接的是一个应用层程序,这样协议栈发送给 tun/tap 的数据包就可以被这个应用程序读取到,此时这个应用程序可以对数据包进行一些自定义的修改(比如封装成 UDP),然后又通过网络协议栈发送出去——其实这就是目前大多数“代理”的工作原理。tun/tap 设备是操作系统内核中的虚拟网络设备,是用软件模拟的网络设备,提供与硬件网络设备完全相同的功能。转载 2025-07-02 16:16:04 · 132 阅读 · 0 评论 -
Ubuntu轻松安装TUN设备:开启隧道通信的简单指南
通过本文,您已经学会了如何在Ubuntu系统上轻松安装和配置TUN设备。TUN设备是网络隧道通信的基础,可以用于多种网络应用。希望这篇文章能够帮助您开启隧道通信之旅。Ubuntu轻松安装TUN设备:开启隧道通信的简单指南 - 云原生实践。转载 2025-07-02 16:11:45 · 71 阅读 · 0 评论 -
透视投影(Perspective Projection)变换推导
这个时候的多边形也许会被视锥体裁剪,但在这个不规则的体中进行裁剪并非那么容易的事情,所以经过图形学前辈们的精心分析,裁剪被安排到规则观察体(Canonical View Volume, CVV)中进行,CVV是一个正方体,x, y, z的范围都是[-1,1],多边形裁剪就是用这个规则体完成的。也就是说,D3D 中在近裁剪平面上的点投影之后的点会处于CVV的z=0平面上,而在远裁剪平面上的点投影之后的点会在CVV的z=1平面上。而另外在一些元素的细节上也存在着差异,这是由于D3D的CVV的z范围不同造成的。转载 2025-06-21 15:50:22 · 58 阅读 · 0 评论 -
有哪些值得推荐的c/c++开源框架与库
c/c++的项目也是各种各样的都有,微电子,物联网,桌面客户端,游戏,服务器开发等等。: 用于创建,读写和操作文件档案(例如zip和 tar)的库,它通过QIODevice的一系列子类,使用gzip格式,提供了透明的压缩和解压缩的数据。: 高效的跨语言IPC/RPC,用于C++,Java,Python,PHP,C#和其它多种语言中,最初由Facebook开发。对于C编程人员,可以考虑node.js。: TinyXML的一个全新的接口,使用了C++的许多许多优势,模板,异常和更好的异常处理。转载 2025-06-21 15:49:14 · 94 阅读 · 0 评论 -
【C/C++ 关键字 函数说明符 】C/C++ _Noreturn关键字(表明调用完成后函数不返回主调函数)
通常,我们在设计那些不会返回到调用者的函数时使用_Noreturn关键字,例如,终止程序的函数,或者抛出异常的函数。在实际编程中,我们可能会遇到一些特殊的函数,这些函数在被调用后,可能会导致程序终止,或者进入一个无限循环,或者抛出一个异常,这些情况下,函数都不会返回到调用它的地方。在C++的各个版本中,_Noreturn关键字的应用都是一致的,都是用来标记那些不会返回的函数。在这一章节中,我们将深入探讨_Noreturn关键字在元模板编程中的应用,以及它在C++11, 14, 17, 20中的变化和应用。转载 2025-06-07 15:03:18 · 80 阅读 · 0 评论 -
关于名称重整(name mangling)、多态性的一些简单介绍
因此,你可以写多个方法,例如PrintInteger(int i)、PrintString(string s) 和 PrintFloat(float f),编译器自会准确调用特定的Print方法。如此,当你调用Print(1)的时候, 编译器可能在内部用源于参数类型的前缀重命名Print方法,这样一来Print(1)可能就变成 i_Print (1)。每一个方法在VMT中都有一个索引, 如此当Print(int)被调用的时候,编译器将被路由到VMT处找寻Print方法和类的内在索引。转载 2025-04-30 14:03:45 · 115 阅读 · 0 评论 -
C++函数重载的实现机制之name mangling
前一期【】讲解了基于实现的动态多态,并且深入剖析了动态绑定在编译期、执行期各自完成的任务。本期继续讲解基于函数重载实现的。转载 2025-04-30 14:01:05 · 120 阅读 · 0 评论 -
CountDownLatch详解以及用法示例
CountDownLatch是一个同步工具类,它通过一个计数器来实现的,初始值为线程的数量。每当一个线程完成了自己的任务,计数器的值就相应得减1。当计数器到达0时,表示所有的线程都已执行完毕,然后在等待的线程就可以恢复执行任务。转载 2025-04-27 16:01:51 · 796 阅读 · 0 评论 -
stl中uninitialized_copy、uninitialized_fill、uninitialized_fill_n剖析
如果 [first, first+n) 范围内的每一个迭代器都指向未初始化的内存,那么 uninitialized_fill_n() 会呼叫 copy constructor,在该范围内产生 x(上式 第三参数)的复制品。uninitialized_fill()也能够使我们将记忆体配置与物件的建构行为分离开来。换句话说,针对输入范围内的每一个迭代器 i,此函式会呼叫 construct(&*(result+(i-first)),*i) ,产 生 *i 的 复制 品, 放置 于 输出范围的相对位置上。转载 2025-04-15 19:36:44 · 109 阅读 · 0 评论 -
SGI STL内存基本处理工具:uninitialized_copy/uninitialized_fill/uninitialized_fill_n
目录。转载 2025-04-15 19:11:32 · 101 阅读 · 0 评论 -
C++11 静态断言(static_assert)
最后再举个例子,用来判断某个类是否有某个指定名字的成员,供参考和体验。static_assert的错误提示,VC比GCC稍微友好一些,VC对上下文和调用堆栈都有较清晰描述,相比之下,GCC的提示简陋一些,但也算比较明确吧,本来么,static_assert很大程度上就是为了编译器的提示信息更加友好而存在的。是运行期断言,它用来发现运行期间的错误,不能提前到编译期发现错误,也不具有强制性,也谈不上改善编译信息的可读性,既然是运行期检查,对性能当然是有影响的,所以经常在发行版本中,assert都会被关掉;转载 2025-04-15 19:10:03 · 144 阅读 · 0 评论 -
C语言宏定义##连接符和#符的使用
#被称为连接符(concatenator),用来将两个Token连接为一个Token。注意,这里连接的对象是Token即可,而不一定是宏的变量。在经过预处理后这一声明变为:int int_namea;可以看出,预编译时,宏参数n被替换,并和name连接成一个整体,然后整体替换NAME宏。属于编译器预处理的范畴,属于编译器概念(而非运行期概念)。这样每次divider(除数)为0的时候便会在。上输出一个提示信息。转载 2025-04-15 19:09:04 · 124 阅读 · 0 评论 -
assert的实现原理浅析(转载)
(2)_wassert函数和后面的0,构成一个逗号表达式,因此part2的返回值是0。因此( (part1) || (part2) )的返回值为0或1取决于part1。即定义了NDEBUG这个宏,那么assert宏被定义为((void)0)。这里的宏,什么都不做,而且同时不能使用它的返回值。实际上,它是一个宏,定义如下。part1为真时,不会被调用。为什么要把( (part1) || (part2) )的返回值转换成void型了?所以,这就避免使用assert宏的返回值,实际上也不能使用它的返回值。转载 2025-04-15 19:08:01 · 82 阅读 · 0 评论 -
预编译中RHS和LHS的概念和区别
LHS。转载 2025-03-31 18:09:26 · 389 阅读 · 0 评论 -
C++ STL move_iterator移动迭代器(深入了解,一文学会)
C++ 11 还为 STL 标准库增添了一种迭代器适配器,即本节要讲的 move_iterator 移动迭代器适配器。move_iterator 迭代器适配器,又可简称为移动迭代器,其可以实现以移动而非复制的方式,将某个区域空间中的元素移动至另一个指定的空间。本文作者原创,转载请附上文章出处与本文链接。转载 2025-03-31 16:53:45 · 120 阅读 · 0 评论 -
C语言指针进阶(一)——深入详解“函数指针”与“指针函数”
1.1 函数指针//注意:这里的括号不能掉,因为括号()的运算优先级比解引用运算符*高这个函数的类型是有两个整型参数,返回值是个整型。对应的函数指针类型对应的函数指针定义://参数名可以去掉,并且通常都是去掉的。这样指针p就可以保存函数类型为两个整型参数,返回值是整型的函数地址了。我们一般可以这么使用,通过函数指针调用函数:a : b;//定义一个与maxValue兼容的指针p(20, 45);//通过指针调用1.2 指针函数。转载 2025-03-18 19:56:18 · 320 阅读 · 0 评论 -
一篇文章搞懂http协议(超详细)
HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写。HTTP协议用于从WWW服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。HTTP是一个无状态的协议。HTTP是一种用作获取诸如 HTML 文档这类资源的协议。转载 2025-03-07 21:28:07 · 2942 阅读 · 0 评论 -
C++条件变量唤醒问题 & notify_one() 唤醒不及时问题
noyify_all能够让所有的等待线程感知,所以能够直接选出来获得锁的。因为我对于 C++中条件变量的等待唤醒部分、的区别方面有些疑点,因此就有了以下的同。的沟通,希望同样能够帮助到大家。转载 2025-03-07 21:26:19 · 126 阅读 · 0 评论 -
服务端主动关闭连接,如何确保对端能够收到全部的数据?
首先发送数据是调用的。转载 2025-03-07 21:23:49 · 87 阅读 · 0 评论 -
C++的字面量运算符重载literal operator
【代码】C++的字面量运算符重载literal operator。转载 2025-03-07 21:20:57 · 94 阅读 · 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 · 179 阅读 · 0 评论 -
C++并发编程的高级接口:async() 和 Futures
作为一名程序员,我们必须确保f的生命周期(注意是f,而不是它引用的共享状态)不小于已启动的线程。例如在如下代码中,我们在当前线程中修改变量c,而在另一个异步线程(std::async启动的后台线程)中读取c,这是一个非同步的并发访问,会出现所谓的数据竞争,结果是未定义的,除非使用互斥锁或原子变量进行同步。如果当前有一个线程可用,则会异步启动,但如果没有线程可用或者系统环境不支持多线程,调用将被推迟,直到明确表示需要它的结果(调用get())或只是希望传递的可被调用对象完成(调用wait())。转载 2025-03-05 21:33:01 · 84 阅读 · 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 · 121 阅读 · 0 评论 -
C++14::lambda函数的类型
auto 自动类型推导关键字隐去了一切有关对象类型的信息,通过typeid关键字我们可查阅一般对象(甚至是函数指针)的类型信息。Lambda的类型,是个不具名function object(或称functor)。除了能得到两个对象均是lambda函数外,无法通过typeid关键字获得额外的信息。转载 2025-03-05 21:29:37 · 44 阅读 · 0 评论 -
httplib库的使用(支持http/https)(一)
httplib库是一个以C++11特性编写的库,所以编译器也需要能支持C++11的。库在使用时只需包含一个头文件即可,非常方便。下载地址注意:此库为线程阻塞,使用时还请注意。转载 2025-03-05 21:25:30 · 160 阅读 · 0 评论 -
cpp-httplib 源码剖析
cpp-httplib是一个c++封装的http开源库,仅包含一个头文件,不过代码行数达到8000多行,相比于上一节中讲述的Tinyhttpd ,该库功能就比较完善,并且可以在简单的项目中使用。cpp-httplib 服务端采用select IO多路复用模型,工作的处理方式,主要包含的类Server、Client、Request、Response。上述进行简单的举例,方便掌握处理流程。借助该库还可以实现http推送功能,更多应用可以参考库中自带的例子。转载 2025-03-05 21:22:59 · 115 阅读 · 0 评论 -
第三方库httplib的使用
回调函数是上面介绍的请求和响应结构体,在使用的时候可以定义一个void(const Request &, Response &)类型的函数进行传入,httplib会自动调用对应方法。通过MultipartFormData 结构中包含了name,用于区分每个MultipartFormData的名字,content是文件的主要内容,filename是文件原本的名字,content_type的上传文件的类型。转载 2025-03-04 09:27:37 · 187 阅读 · 0 评论 -
简单的 curl HTTP的POST&GET请求以及ip port连通性测试
100 Continue 是 HTTP/1.1 中的一种状态码,表示服务器已经收到了请求头,并且客户端应该继续发送请求体。端口直接进行登录,另一个为我们使用网关接口,进行登录转发到登录系统,进行登录操作。,项目部署完成后我们需要进行项目后端接口的测试功能,但是由于客户那边么有条件安装类似于。注意:我们测试环境密码校验部分已经注释,可以随意填写,所以测试密码为随机填写。我们使用curl 进行测试接口,接口使用网关接口,首先我们使用。我们测试的登录一共有两个接口,其中一个是我们。命令来模拟登录接口的登录测试。转载 2025-03-04 09:26:36 · 600 阅读 · 0 评论 -
3-1 HTTP全解(IP、端口port、域名、URL、curl命令)
1.前言HTTP:超级文本传输协议protocol:协议、礼节、入门李爵士发明的三样东西:WWW=URL+HTTP+HTML。转载 2025-03-04 09:21:10 · 164 阅读 · 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 · 476 阅读 · 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 · 70 阅读 · 0 评论 -
正则大全,一定有你需要的,进来搜
(Regular Expression,简称regex或regexp)是编程中一个非常强大的工具,它用于匹配字符串中字符的组合。今天,我将为大家总结100个常用的正则表达式。这些正则表达式涵盖了各种常见的匹配需求,但请注意,正则表达式可能因具体需求而有所调整。在实际应用中,建议根据具体情况进行测试和优化。转载 2025-02-28 16:41:37 · 298 阅读 · 0 评论 -
c++11 读写锁实现
2. 对于更老的代码(c++11之前,没有conditional_variable),可能需要根据。3. 补充一个windows下的信号量。在一些读多写少的业务场景下,转载 2025-02-27 17:57:33 · 83 阅读 · 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 · 331 阅读 · 0 评论 -
图说C++对象模型:对象内存布局详解
文章较长,而且内容相对来说比较枯燥,希望对C++对象的内存布局、虚表指针、虚基类指针等有深入了解的朋友可以慢慢看。本文的结论都在VS2013上得到验证。不同的编译器在内存布局的细节上可能有所不同。文章如果有解释不清、解释不通或疏漏的地方,恳请指出。这篇文章主要来讨论C++对象在内存中的布局,属于第二个概念的研究范畴。而C++直接支持面向对象程序设计部分则不多讲。虚函数表解析。含有虚函数或其父类含有虚函数的类,编译器都会为其添加一个虚函数表,vptr,先了解虚函数表的构成,有助对C++对象模型的理解。转载 2025-02-25 21:30:39 · 95 阅读 · 0 评论 -
using 的三大作用汇总
using到底是干嘛的?using的功能总有一种覆盖面广的感觉,似乎并没有特定的功能。其实using的功能主要可以总结为两个 “引入”、一个 “别名”。其中两个引入是指和,一个别名是指。但实际上又并非这么简单,using在类中又被赋予了更多的意义,本文将就上面讲到的这些内容作整理总结。转载 2025-02-25 15:47:50 · 67 阅读 · 0 评论 -
C++内存管理:shared_ptr/weak_ptr源码(长文预警)
本文主要讲述c++提供的shared_ptrweak_ptr和,以及详解MSVC中STL提供的智能指针源码。转载 2025-02-23 21:41:10 · 201 阅读 · 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 · 182 阅读 · 0 评论 -
weak_ptr弱引用智能指针详解
这个指针天生一副小弟的模样,也是在C++11的时候引入的标准库,它的出现完全是为了弥补它老大天生有缺陷的问题。相比于上一代的智能指针来说,新进老大可以说近乎完美,但是通过引用计数实现的它,虽然解决了指针独占的问题,但也引来了引用成环的问题,这种问题靠它自己是没办法解决的,所以在C++11的时候将和一起引入了标准库,用来解决循环引用的问题。什么是循环引用的问题呢?在shared_ptr的使用过程中,当强引用计数为0是,就会释放所指向的堆内存。那么问题来了,如果和死锁一样,当两个shared_ptr互相引用,那转载 2025-02-23 21:38:04 · 60 阅读 · 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 · 114 阅读 · 0 评论