现代 C++ 性能飞跃之:移动语义
*以下内容为本人的学习笔记,如需要转载,请声明原文链接 微信公众号「ENG八戒」https: mp.weixin.qq.com Xd_FwT8E8Yx9Vnb64h6C8w
带给现代 C++ 性能飞跃的特性很多,今天一边聊技术,一边送福利!
过去写 C/C++ 代码,大家对数据做传...[2023/6/9]
C++ this 指针
第一部分
this 指针的类型可理解为 Box*。
此时得到两个地址分别为 box1 和 box2 对象的地址。
实例:
#include <iostream>
using namespace std;
cla Box{
public:
Box(){;...[2023/6/8]
混合编程python与C++混合编程python与C++
上个版本: 只是用到ctypes进行传输, 这次将python服务端更改为C++服务端,方便后续维护.
本文实现功能: python传输图片给C++, C++接受图片后对图片进行处理,并将结果返回给python客户端, pa image from python to C++
C++ 服务端
...[2023/6/8]
C++面试八股文:C++中,函数的参数应该传值还是传引用?
某日二师兄参加XXX科技公司的C++工程师开发岗位第8面:
面试官:C++中,函数的参数应该传值还是传引用?
二师兄:要看参数的用途。如果是出参,必须传引用。如果是入参,主要考虑参数类型的大小,来决定传值还是传引用。
面试官:为什么不使用指针?
二师兄:传指针也称之为传引用(pa b...[2023/6/8]
C++ 类 & 对象C++ 类 & 对象
一、C++ 类 & 对象
C++ 类定义
定义一个类需要使用关键字 cla ,然后指定类的名称,并类的主体是包含在一对花括号中,主体包含类的成员变量和成员函数。
定义一个类,本质上是定义一个数据类型的蓝图,它定义了类的对象包括了什么,以及可以在这个对象上执行哪些操作。
关键字 publi...[2023/6/7]
在C++中,传值还是传引用?
情况一:需要修改原对象
需要修改原对象的情况,必须要传引用。这种情况没什么要说的。
情况二:不需要修改原对象
对于内置类型(整数、浮点数、字符类型等),传值效率更高。主要有三点原因:
内存开销更小。由于内置类型普遍小于8byte,因此内存占用和拷贝开销均较小。
局部性更好。传值时,函数...[2023/5/30]
Multiserver游戏服务器Demo[C++&Lua]Multiserver游戏服务器Demo[C++&Lua]
代码参考
代码文件参考下述详解的类图,工程参考第零章工程说明
关键特性
对Socket库进行封装,抹平Socket的Window&Linux的平台差异。
C++嵌入lua脚本,增加开发者编码效率,减少编译时间消耗。
非阻塞网络IO
多线程任务模型
多服务模型
详解
Socket库封装...[2023/5/29]
【重学C++】05 | 说透右值引用、移动语义、完美转发(下)
文章首发
【重学C++】05 | 说透右值引用、移动语义、完美转发(下)
引言
大家好,我是只讲技术干货的会玩code,今天是【重学C++】的第五讲,在第四讲《【重学C++】04 | 说透右值引用、移动语义、完美转发(上)》中,我们解释了右值和右值引用的相关概念,并介绍了C++的移动语义以及如...[2023/5/29]
【重学C++】01| C++ 如何进行内存资源管理?【重学C++】01| C++ 如何进行内存资源管理?
文章首发
【重学C++】01| C++ 如何进行内存资源管理?
前言
大家好,我是只讲技术干货的会玩code,今天是【重学C++】的第一讲,我们来学习下C++的内存管理。
与java、golang等自带垃圾回收机制的语言不同,C++并不会自动回收内存。我们必须手动管理堆上内存分配和释放,这往...[2023/5/22]
C++中的字符串编码处理
今天由于在项目中用到一些与C++混合开发的东西 ,需要通过socket与C++那边交换数据,没啥特别的,字节码而已,两边确定一种编码规则就行了。我们确定的UTF-8。关于C++的 这种又是宽字节 又是Me ageBoxW 又是Me ageBoxA 的 ,说实话相比C#而言 搞的确实非常的和稀泥 ...[2023/5/15]
C++/Qt遍历多维数组的3种方式示例C++/Qt遍历多维数组的3种方式示例
目录一、什么是多维数组二、遍历多维数组2.1 使用范围for语句处理多维数组2.2 使用指针遍历多维数组2.3 使用类型别名遍历多维数组附:多维数组初始化总结 一、什么是多维数组
想要遍历多维数组,就得知道什么是多维数组。
严格来说,C++语言中没有多维数组,通常所说的多维数组其实是数组的数...[2023/5/15]
C++实现读写ini配置文件的示例代码
目录1.概述2.ini格式语法3.配置读取4.demo示例5.自动生成读取代码 1.概述
配置文件的读取是每个程序必备的功能,配置文件的格式多种多样,例如:ini格式、json格式、xml格式等。其中属ini格式最为简单,且应用广泛。
2.ini格式语法
注释内容采用“#&rd...[2023/5/8]
用C++编写一个简单的发布者和订阅者
摘要:节点(Node)是通过 ROS 图进行通信的可执行进程。
本文分享自华为云社区《编写一个简单的发布者和订阅者》,作者: MAVER1CK 。
@[toc]
参考官方文档:Writing a simple publisher and subscriber (C++)
背景
节点(Nod...[2023/4/28]
C++实现单例模式日志输出详解
目录一、单例模式简单介绍1.1 基础介绍1.2 单例模式使用场景二、单例模式实现日志记录(Singleton Logger)三、总结 一、单例模式简单介绍
1.1 基础介绍
单例模式只保证一个程序内只有一个实例存在,并提供全局访问点来访问该实例,其实就是单例模式的类对象只允许存在一个,它和多...[2023/4/24]
C++ 测试框架 GoogleTest 初学者入门篇 丙C++ 测试框架 GoogleTest 初学者入门篇 丙
theme: channing-cyan
*以下内容为本人的学习笔记,如需要转载,请声明原文链接 微信公众号「ENG八戒」https: mp.weixin.qq.com RIztusI3uKRnoHVf0sloeg
开发者虽然主要负责工程里的开发任务,但是每个开发完毕的功能都是需要开发...[2023/4/17]
网络框架重构之路plain2.0(c++23 without module) 综述
最近互联网行业一片哀叹,这是受到三年影响的后遗症,许多的公司也未能挺过寒冬,一些外资也开始撤出市场,因此许多的IT从业人员加入失业的行列,而且由于公司较少导致许多人求职进度缓慢,很不幸本人也是其中之一。自从参加工作以来,一直都是忙忙碌碌,开始总认为工作只是为了更好的生活,但是一旦工作停下来后自...[2023/4/12]
利用C++实现简易的狼人杀游戏
狼人杀游戏是一款非常有趣的角色扮演游戏,它需要玩家之间互相猜测身份并进行投票,通过推理来找出真正的狼人。
以下是一个基本的狼人杀游戏的C++实现,其中包含游戏角色、游戏流程和基本的逻辑。你可以根据需要添加更多的功能和细节。
#include <iostream>
#inclu...[2023/4/10]
Algorithm参数记录
一、vector<Point2f>
vector 是一个存储二维点坐标的容器,其中每个元素都是一个Point2f类型的对象。在OpenCV中,Point2f表示一个由两个单精度浮点数构成的二维点坐标。
你可以使用vector 来存储一些二维坐标信息,比如图像中的关键点或轮廓点等。具...[2023/4/7]
C++库封装JNI接口——实现java调用c++ - Lee-zq
1. JNI原理概述
通常为了更加灵活高效地实现计算逻辑,我们一般使用C/C++实现,编译为动态库,并为其设置C接口和C++接口。用C++实现的一个库其实是一个或多个类的简单编译链接产物。然后暴露其实现类构造方法和纯虚接口类。这样就可以通过多态调用到库内部的实现类及其成员方法。进一步地,为了让不...[2023/4/6]
C++ 测试框架 GoogleTest 初学者入门篇 甲
*以下内容为本人的学习笔记,如需要转载,请声明原文链接 微信公众号「ENG八戒」https: mp.weixin.qq.com BS_u9A4EY50y4vDDuxkCAQ
开发者虽然主要负责工程里的开发任务,但是每个开发完毕的功能都是需要开发者自测通过的,所以经常会听到开发者提起单元测试...[2023/3/31]
C++类中三大函数详解(构造、析构和拷贝)
目录前言一.构造函数1.构造函数的作用2.构造函数的语法 类名(){}二.析构函数1.析构函数的作用2.析构函数的语法~类名(){}三.构造函数的分类及调用1.两种分类方式:2.三种调用方式:四.拷贝构造函数调用时机五.构造函数调用规则六.深拷贝与浅拷贝总结: 前言
今天和大家分享一下C++中在...[2023/3/31]
通过示例详解C++智能指针
目录引言基本概念智能指针类型使用技巧注意事项示例总结术语 引言
C++是一种广泛使用的编程语言,它允许程序员使用动态分配的内存。然而,手动管理内存可能会导致一些严重的问题,如内存泄漏和悬空指针。为了解决这些问题,C++引入了智能指针的概念。智能指针是一种特殊的指针类型,它可以自动管理内存并确...[2023/3/27]
本地推理,单机运行,MacM1芯片系统基于大语言模型C++版本LLaMA部署“本地版”的ChatGPT
OpenAI公司基于GPT模型的ChatGPT风光无两,眼看它起朱楼,眼看它宴宾客,FaceBook终于坐不住了,发布了同样基于LLM的人工智能大语言模型LLaMA,号称包含70亿、130亿、330亿和650亿这4种参数规模的模型,参数是指神经网络中的权重和偏置等可调整的变量,用于训练和优化神经...[2023/3/24]
c++ 内存顺序
搞懂无锁编程的重要一步是完全理解内存顺序!
本教程由作者和ChatGPT通力合作完成。
都有哪几种?
c++的内存模型共有6种
memory_order_relaxed
memory_order_consume
memory_order_acquire
memory_order_relea...[2023/3/14]
c/c++指针从浅入深介绍——基于数据内存分配的理解(上)
c/c++指针从浅入深介绍——基于数据内存分配的理解(上)
本文是对自我学习的一个总结以及回顾,文章内容主要是针对代码中的数据在内存中的存储情况以及存储中数值的变化来对指针进行介绍,是对指针以及数据在内存中数值是如何变化的,为什么需要使用到指针,为什么有时候使用指针很容易会报错,怎么去使用...[2023/3/14]
C++11 thread_local关键字
这是一篇科普文--关于thread_local关键字
首先,C++11之前并没有对并发进行任何的支持,C++11首次提供了以下的支持:
语言核心定义了一个内存模型,保证当更改"被两个不同线程使用"的两个object时,他们彼此独立,而引用thread_local关键字
标准库支持启动多线程,...[2023/3/8]
C++20中的span容器及用法小结
目录一.span容器二.span的用法1.将数组转换为 span:2.使用 span 来遍历一个容器:3.使用 span 来获取子序列:4.将 span 转换为其他容器类型:三.span的底层原理四.span 与 array ,vector ,数组指针 的区别1. span 与 array ,vec...[2023/3/6]
C++20中的std::span详解
span就是一个连续对象存储的观察者。类似std::string_view是string的观察者。连续的存储,不一定是数组。例如:
zero(char (&arr) [10]); 10个元素的数组, sizeof(arr)==10*sizeof(char)==10
zero(ch...[2023/3/6]
C++学习之函数模板的使用详解C++学习之函数模板的使用详解
目录C++函数模板重载的模板模板局限性显示具体化实例化和具体化模板函数类型的确定 C++函数模板
template<typename T>
void Swap(T &a ,T &b)
{
T temp;
temp = a;
a = b...[2023/3/3]
vs2022?x64?C/C++和汇编混编(案例代码)
目录vs2022环境x64 C/C++和汇编混编1、新建空的win32项目,新建main.cpp,示例代码如下2、新建asm64.asm汇编源文件,示例代码如下3、编译器配置,选择x64,debug或者release都可以,4、直接生成即可 vs2022环境x64 C/C++和汇编混编
vs64...[2023/2/27]
OpenCV使用GrabCut实现抠图功能
目录1、概述2、代码示例3、示例图片 1、概述
案例:使用OpenCV的GrapCut实现有用户交互的抠图
grabCut( InputArray img, InputOutputArray mask, Rect rect,
Input...[2023/2/20]
OpenCV实现视频绿幕背景替换功能的示例代码
目录1、概述2、代码示例 1、概述
案例:使用OpenCV实现视频绿幕背景替换
算法步骤:
1.初始化VideoCapture并使用其open方法加载视频
2.while循环加读取frame capture.read(frame)
3.将frame转hsv色彩空间
4.使用i...[2023/2/20]
OpenCV通过透视变换实现矫正图像详解
目录1、概述2、代码演示3、示例图片 1、概述
案例:使用OpenCV将一张折射的图片给矫正过来
实现步骤:
1.载入图像
2.图像灰度化
3.二值分割
4.形态学操作去除噪点
5.轮廓发现
6.使用霍夫直线检测,检测上下左右四条直线(有可能是多条,但是无所谓)
...[2023/2/20]
c++ 程序通用多线程单例设计 c++ web 框架设计经验谈
设计 c++ web 框架时候,想要一个框架缓存类,很多通用缓存类是用字符保存,作为框架内置就不要序列和反序列了,因为框架内部使用。
想给自己的paozhu c++ web 框架添加缓存类,参考了springboot 于是确定用单例设计模式缓存类模板。
c++11后静态变量已经统一为线程安全...[2023/2/17]
高效字符串匹配算法——BM 算法详解(C++)高效字符串匹配算法——BM 算法详解(C++)
定义
BM 算法是由 Boyer 和 Moore 两人提出的一种高效的字符串匹配算法,被认为是一种亚线性算法(即平均的时间复杂度低于线性级别),其时间效率在一般情况下甚至比 KMP 还要快 3 ~ 5 倍。
原理
BM 算法跟其他的字符串匹配算法相比,其中一个不同之处是在比对字符的时候,扫描的...[2023/2/15]
C++右值引用与移动构造函数基础与应用详解
目录1.右值引用1.1左值右值的纯右值将亡值右值1.2右值引用和左值引用2.移动构造函数2.1完美的移动转发 1.右值引用
右值引用是 C++11 引入的与 Lambda 表达式齐名的重要特性之一。它的引入解决了 C++ 中大量的历史遗留问题, 消除了诸如 std::vector、std::st...[2023/2/15]
C++ lambda函数详解
目录Lambda 表达式基础1. 值捕获2. 引用捕获3. 隐式捕获4. 表达式捕获泛型 Lambda函数对象包装器 Lambda 表达式
Lambda 表达式是现代 C++ 中最重要的特性之一,而 Lambda 表达式,实际上就是提供了一个类似匿名函数的特性, 而匿名函数则是在需要一个函数,但...[2023/2/15]
一篇文章彻底搞懂C++常见容器
目录1.概述2.容器详解2.1vector(向量)2.2deque(双端队列)2.3list(列表)2.4 array(数组)2.5 string(字符串)2.6 map(映射)2.7 set(集合)3.后记 1.概述
C++容器属于STL(标准模板库)中的一部分(六大组件之一),从字面意思理解...[2023/2/15]
C++之list容器模拟实现方式
目录总述一、节点类二、迭代器类成员变量构造函数*重载->重载“++”“==“和”!=”三、反向迭代器类成员变量*重载->重载“++”“- -”" == &qu...[2023/2/8]
C++深浅拷贝及简易string类实现方式
目录三种拷贝方式浅拷贝深拷贝写时拷贝VS与GCC中的拷贝方式Windows VS2022Linux GCC简易string类传统版写法的string类现代版写法string类总结 三种拷贝方式
浅拷贝
对于自定义的string类,如果不显式定义拷贝构造函数,编译器会默认生成拷贝构造函数,此时...[2023/2/8]
C++之list容器介绍及使用方式
目录一、list底层结构二、构造方法构造函数拷贝构造函数三、元素访问和迭代器back&front三种遍历方式四、元素修改尾插、头插、尾删、头删insert、eraseswapresize五、特殊操作removeremove_ifunique、sortreverse六、list迭代器失效问题七...[2023/2/8]
C++内存对齐的实现
目录空类/静态成员内置类型数据成员结构体数据成员虚函数继承 内存对齐的基本原则:
结构(struct/cla )的内置类型数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员的起始位置要从自身大小的整数倍开始存储(特别注意64位机器的指针大小为8个字节)。如果一个结构A里有结构体成...[2023/2/8]
C/C++内存对齐原则C/C++内存对齐原则
C/C++内存对齐
what && why
当用户自定义类型时(struct 或 cla ),编译器会自动计算该类型占用的字节数。
C/C++ 为什么要内存对齐?我道行太浅,摘抄了网上的一个解释。
为了方便从内存中读取数据。假设没有内存对齐,在内存中存储一个 int 变量 ...[2023/2/6]
C/C++关于实现CAN信号的获取方法
目录CAN基础知识CAN 信号C语言涉及到知识 CAN基础知识
标准的CAN 数据为8字节,即64位,但是CAN FD的最大数据可为64字节,为512位,其中的帧ID分为标准帧和扩展帧,其中用11位标准帧,用29位表示扩展帧。
CAN 信号
信号具体指的是CAN数据的多少位到多少位间代表...[2023/2/6]
C/C++程序链接与反汇编工具objdump的使用介绍
目录链接阶段1.重定位2.解析引用3.链接示例 程序构建过程的第二个阶段就是链接,链接过程输入的是目标文件的集合。每个目标文件可以被看作单个源代码文件的二进制存储版本,需要为程序内存映射提供各种各样的节(代码.text 初始化数据.data 未初始化数据.b 和只读数据.rdata),链接器的最终...[2023/2/6]
C++聚合体初始化aggregate initialization详细介绍
目录聚合体初始化(aggregate initialization)扩展聚合体初始化的动机使用聚合体扩展聚合体的定义向后的不兼容性 聚合体初始化(aggregate initialization)
C++有很多初始化对象的方法。其中之一叫做 聚合体初始化(aggregate initializa...[2023/2/6]
ua5.4源码剖析:三. C++与Lua相互调用
概述
从本质上来看,其实说是不存在所谓的C++与lua的相互调用。lua是运行在C上的,简单来说lua的代码会被编译成字节码在被C语言的语法运行。在C++调用lua时,其实是解释运行lua文件编译出来的字节码。lua调用C++其实还是解释运行lua文件编译出来的字节码的语义是调用lua栈上的C+...[2023/2/1]
C++类中const修饰的成员函数及日期类小练习
目录一.const修饰类的成员函数1.问题引出:2.问题分析3.const修饰类的成员函数 二. 类的两个默认的&运算符重载三. 日期类小练习 总结
一.const修饰类的成员函数
1.问题引出:
给出一段简单的代码
代码段:
#include &l...[2023/1/30]
C++ 编译依赖管理系统分析以及 srcdep 介绍C++ 编译依赖管理系统分析以及 srcdep 介绍
C++ 编译依赖管理系统分析以及 srcdep 介绍
如果用 C++ 写一个中小型软件,有要用到很多第三方库的话,相信不少人会觉得比较麻烦。很多新兴的语言都有了统一的依赖管理系统和构建系统,但是 C/C++ 界一直没有比较正统的。(也不奇怪,连统一的 string 都没有,怎么可能有统一的依赖、...[2023/1/11]
C++利用用埃式筛法求解素数
目录埃式筛法埃式筛法求解某一个数字包含的所有素数数组埃式筛法判断某一个数字是否为素数 埃式筛法
首先要了解什么式埃式筛法之前,需要知道一个定理。
就是素数的整数倍一定不是素数。
了解了这个就基本大概懂了埃式筛法。
首先初始化一个布尔数组is_prime,用于记录每个数是否为素数。从2开...[2023/1/6]