c/c++
smy..
这两年较忙,更新较少, 随机上线,乱写一气
感谢各位 谢谢大家!
展开
-
c++ 编译为WebAssembly时,怎么判断是release/debug环境?
c++ 编译为WebAssembly时,怎么判断是release/debug环境?原创 2024-03-21 16:46:13 · 320 阅读 · 0 评论 -
关于 svg path 路径坐标 精度误差问题
关于 svg path 路径坐标 精度误差问题原创 2024-03-04 14:19:56 · 435 阅读 · 0 评论 -
编译器什么时机才会为我们生成默认的构造
编译器什么时机才会为我们生成默认的构造原创 2023-03-14 14:24:24 · 266 阅读 · 0 评论 -
通过skia/freetype 解析字体获取fontfamily fontstyle name 支持多语言翻译
通过skia/freetype/harfBuzz 解析字体获取fontfamily fontstyle name 支持多语言翻译原创 2022-09-05 11:22:19 · 1233 阅读 · 0 评论 -
c++ 判断模板参数类型
c++ 判断模板参数类型原创 2022-08-16 09:47:48 · 2219 阅读 · 0 评论 -
关于c++11 类成员就地初始化与构造函数初始化列表
关于c++11 类成员就地初始化与构造函数初始化列表原创 2022-06-07 09:58:33 · 332 阅读 · 1 评论 -
关于容器元素内为const,std::vector<const int> 赋值编译失败的问题
如题std::vector a;std::vector b;a = b; //error这里只是举个例子,如果vector中套了好几层东西 里面有个const, 看报错 想不到是这个原因为啥这样加个const 就报错呢??和vector 有关系?其实没关系看一个例子 里面就能理解了命名就是瞎的键盘了 凑合看吧明白了吧, 你写了const 就不能赋值了,为啥拷贝构造可以呢?因为使用了初始化列表 如果也是用赋值的形式 也是报错的知识 +1 ,你学到了吗?...原创 2022-03-04 17:24:53 · 509 阅读 · 0 评论 -
c++ 引用 就一定安全吗 不一定
c++ 引用 就一定安全吗?为啥会有这个问题呢?引用不能为空, 一旦初始化就不能进行就行指向修改也就是不会用nullptr 或者野指针吧?但是引用的底部实现还是常量指针啊看个demo吧#include <iostream>#include <string>using namespace std;class Test{public: int getValue() const { return m_value; }private: int m_value原创 2022-01-26 11:18:05 · 2590 阅读 · 0 评论 -
c++解析svg的一些思路
最近一直在做 svg格式的解析和渲染首先什么是svg ?他虽然是图片格式 其实和我们常见的png,jpg是不一样的,这个里面就是xml,描述了一些图形曲线之类的他有个好处就是矢量图形不会模糊失真等等如果熟悉 iconfont的 和做过一些设计的 应该知道 这些图标就是 svg 格式这个就是一个svg 文件的内容,其实像word excel 等 也是ooxml格式 只不过比这个还要复杂的多的多svg 相关的元素和属性也是比较多的 上百种这个是w3c的官方链接https://develop原创 2022-01-25 17:25:08 · 4045 阅读 · 6 评论 -
c++ 指针作为函数参数内部置空野指针问题
本次主要说一下指针重复释放 & 野指针释放的问题主要3点1.指针作为参数传递 内部置空导致野指针#include <iostream>#include <string>#include <vector>#include <memory>class Item{ int value = 1;};class A{public: A(Item* item) //构造时需要传入一个item指针 { if (item)原创 2022-01-22 13:34:04 · 2123 阅读 · 0 评论 -
webAssembly
目前工作中用到了这个技术, 什么技术呢?webAssembly https://github.com/WebAssembly/design可以去看中文网站 https://www.wasm.com.cn/它是个什么东西 简单描述一嘴就是 能把c/c++/rust 等语言写的代码 编译成 .wasm 的文件 给到浏览器来运行,速度要比js快多了用它能干啥?解决某些web化的产品性能不足的问题,逻辑全部c++写 ui 用前端做而且还没有跨平台的问题,2017年 出的标准, 目前还不是很火,原创 2021-12-15 20:53:14 · 245 阅读 · 1 评论 -
互斥锁 mutex 与 事件event 区别 你知道吗?
如题互斥锁 与 事件 大家应该都不陌生用来做进程/线程下的 同步, 那么这俩到底啥区别?该如何选择?事件 event:事件选项能够让线程选择阻塞直到事件被广播,因此名称为“事件”。这与将某些东西置于睡眠状态并仅在发生重要事情时才将其唤醒是一样的。事件与互斥体不同,因为互斥体没有信号选项或功能。一旦能够等待它的人被唤醒,事件就能够清除信号。甚至 API 也能够允许选项阻塞直到一个或所有不同的事件被发出信号。此外,事件是内核对象。与互斥锁相比,它们并不“轻”。事件基本上是具有两种状态的内核对象。通常原创 2021-11-22 17:42:12 · 636 阅读 · 0 评论 -
windows 匿名管道和命名管道的区别 你知道吗?
说到管道 大家都不陌生,做进程间通信的一种很 “基本“ 的手段命名管道与匿名管道的区别大家了解吗?我开始也是不知道,被问懵了这里简单来列一下 两者的区别1.命名管道可以跨进程访问可以机器在网络上访问命名的管道其实是在内核开辟一块缓存区,跨进程通过这个唯一标识符建立连接后,通过这个缓存区交换数据2.匿名管道我在想 没有一个名字怎么跨进程使用呢? 也没有唯一的标识啊难道不能跨进程?那它出现的意义又是什么呢?后面查阅了一下资料匿名管道用于父子进程之间的通讯只能用于本机,不能跨机器网络W原创 2021-11-22 16:58:51 · 893 阅读 · 0 评论 -
windows API sendmessage 怎么传递字符串参数?
如题 跨进程 通过sendmessage 怎么传递字符串?开始我想到的是 自定义消息类型 + 参数(字符串)就好了这是msdn 给出的sendmessage的定义LRESULT SendMessage( [in] HWND hWnd, [in] UINT Msg, [in] WPARAM wParam, [in] LPARAM lParam);完蛋 貌似不行, 因为是跨进程,这样传一个字符串地址的是不行的那怎么传字符串呢?后面了解到 WM_COPYDATA ,msd原创 2021-11-22 16:11:49 · 912 阅读 · 0 评论 -
c/c++ 的常见4种函数调用约定 进阶知识你知道吗?
前言:c/c++ 的函数调用约定? 懵吗我第一次听到是真懵 专门做了一些了解 记录一下什么是函数调用约定:就是对函数调用的一个约束和规定(规范),描述了函数参数是怎么传递和由谁清除堆栈的。也就以下3点:1、参数传递的方式(是否采用寄存器传递参数、采用哪个寄存器传递参数、参数压桟的顺序等);ps:参数的传递方式,最常见的是通过栈传递。函数的调用方将参数压入栈中,函数自己再从栈中将参数取出。 对于有多个参数的函数,调用惯例要规定函数调用方将参数压栈的顺序,是从左往右还是从右往左。有些调用惯例还允原创 2021-11-19 17:34:52 · 1140 阅读 · 0 评论 -
windows c++ 优雅的捕获crash并处理
crash 是在所难免的你像qq 和 微信 也避免不了crash, 但是当crash 出现后, 怎么处理比较好呢?你像qq 崩溃后 提示 抱歉 qq 遇到意外情况, xxxx 然后收集 dump 就退出了这样用户体验还可以, 如果是弹出一个 默认的红框 加一大串英文 可能用户就骂娘了ok,咱们也优雅的处理一下。关键函数::SetUnhandledExceptionFilter看 msdn 介绍就是一个crash 异常过滤器, 传入一个 callback 然后 crash 后就进入你的c.原创 2021-11-11 15:58:20 · 2811 阅读 · 0 评论 -
c++ 实现一个 函数顺序执行队列
如题 , 什么是函数顺序执行队列 ?日常开发可能有这样的需求软件打开 初始化先初始化声音模块初始化视频模块初始化某某模块等 顺序执行 ,而且初始化过程还有阻塞等,一个模块错误就退出报错如果我们全部顺序写 会有很多重复的代码比如if(!initA()){dosometh();exit;}if(!initB()){dosometh();exit;}if(!initC()){dosometh();exit;}可能c 还需要在线程中执行 等等 写起来不方便 不美观原创 2021-11-10 17:37:28 · 1410 阅读 · 0 评论 -
c++ WinAPI 获取文件被占用的进程信息
如题比如我们删除某个文件中,如果文件被占用的话是删除不掉的,那么替换操作啥都不行故要实现这个提前检测有哪些被占用了, 已经被哪个进程占用的.我这个需求就是检测dll被哪个进程占用的总结了3种解决方案1. 通过拍进程快照,然后遍历每个进程上面dll module, 然后dll 名字匹配的形式.这里引发了一个问题, 我这个进程是32位的,然后我的dll 有64 和32位的, 拍进程快照的方式32位进程 只能读32位进程的dll模块信息当遍历的目标进程是64位时 会lasterror 为299原创 2021-10-20 11:08:25 · 3616 阅读 · 2 评论 -
windows下dump捕获 crashpad
前言:windows 下应用程序 肯定离不开crash , crash 不怕, 可怕的是不知道怎么复现 没有相关的头绪所有dump文件很重要帮助我们分析定位问题crashpad本篇介绍使用 crashpad 来进行dump 的捕获怎么使用呢?crashpad 的介绍这里也不提了肯定要编译了 这里就不介绍怎么编译 因为我直接提供了 编译好的 include + lib + pdb放到 github了点我进行下载配置使用 crashpad拿vs 2019 举例 属性 -> c/c+原创 2021-08-16 17:22:58 · 3170 阅读 · 0 评论 -
windows下的视频捕获模块 videoCapture 【可直接编译使用】
介绍windows下开发 经常会用到打开摄像头的功能, 这个模块比较通用直接实现到exe程序中会有代码冗余,不如抽象成一个模块故写了一个视频采集模块,比较简单。不限制GUI程序,故没用Qt的qcameraInfoWindows 平台下 基于openvc400 的视频捕获模块功能:1.获取摄像头列表+摄系统支持的分辨率列表2.线程采集摄系统,视频frame通过callback回传3.代码量较少接入方便,一个dll+接口代码结构dll.main //文件入口videocap原创 2021-08-09 20:08:56 · 1917 阅读 · 5 评论 -
windows c++ directShow com 获取本机摄像头列表以及分辨率
windows c++ 获取本机摄像头列表以及分辨率如果是qt 的话 可以通过QCameraInfo 来进行获取 auto a = QCameraInfo::availableCameras(); a[0].deviceName(); a[0].description();但是我看了下QCameraInfo 的源码也, DirectShow COM 接口获取的qt 源码\Qt5.12.11\5.12.11\Src\qtmultimedia\src\plugins\direc原创 2021-08-09 18:07:02 · 3361 阅读 · 3 评论 -
记录一个坑 应用程序在非管理员权限下启动失败0xc00000022
遇到一个坑 记录一下当在非管理员权限下, 启动应用程序 会出现 0xc0000022刚开始以为是安装权限问题, 后面测试了一下其他的exe 发现可以感觉应该是应用程序依赖的环境问题借助 ProcessMonitor 抓了一下 发现是vcomp140.dll 这个拒绝访问应该就是他了写了段代码测试了一下, 直接loadlibrary 在 非管理员权限下 真的是load 失败报错 errorCode 是 5 没有权限后面我想这个系统的dll 是谁间接依赖的呢? 我的程序没有使用他慢慢找原创 2021-07-19 18:40:14 · 968 阅读 · 1 评论 -
c++ 网易一面
刚面完 没空写 抽空写原创 2021-05-25 16:04:38 · 316 阅读 · 0 评论 -
c++ 阿里巴巴 一面
c++ 阿里巴巴 一面面的岗位感觉不太对 ,好像投了两个岗位,一个是客户端的开发 一个啥安卓内核开发(貌似猎头给推的这个)这个面试官是哪个的我也不太清楚 稀里糊涂的一面电话面 有两个面试官老套路简单的自我介绍然后围绕项目沟通了一下没问技术方面的 , 面试官说搞内核的同事今天没在。。。。然后就说后面等同事来了 有机会在联系了。。。。。...原创 2021-05-18 20:43:51 · 366 阅读 · 0 评论 -
QLineedit 源码调试关于placheholderText的坑
前言:接近一年没有更新文章了 也没有看评论与私信,哎 日常工作太累了,也变懒了这里分享一个遇到的小坑 关于QLineedit 设置默认占位内容的 setPlacheholderText背景:我们客户端内嵌了cef浏览器在调试一个客户端UI 与 前端页 UI 字体对不齐的bug直接上图说一下吧ps:这里具体的一些东西就不说了 直接说问题和重点吧相比上图前端实现, 明显的客户端 绿色圈里有个空隙 这个空隙是哪里来的?秉承与 UI 1px不差的原则 这个问题要修复思路:要不就是自己代码的原创 2021-03-09 21:34:18 · 528 阅读 · 0 评论 -
windows c++ 获取SmBios信息 比如系统信息制造商内存信息等
不啰嗦了 没有时间//////////////////////////////////////////////////////////////////////////////#include <iostream>#include <windows.h>#include "Winbase.h"#include <stdio.h>#include <string>typedef struct _dmi_header{ BYTE type;原创 2020-12-18 18:00:09 · 3183 阅读 · 7 评论 -
c++ winAPI 读写注册表 RegOpenKeyExW RegSetValueExW
时间有限 简写 贴代码winAPI 读注册表读xxx 路径下的 userid的值写注册表判断 注册表路径是否存在,不存在创建 然后把值写入 注意参数 有DWORD REGSTR 类型 别搞错原创 2020-07-31 11:29:42 · 1332 阅读 · 0 评论 -
c++ 在dll 中获取 dll 的路径 reinterpret_cast<HINSTANCE>(&IMAGE_DOS_HEADER)
前言:比如 我们有个 test.exe 加载了 A.dll 然后 A.dll 内部又加载了 B.dlltest.exe 比如在 c盘 A.dll 在D盘 B.dll在E盘那么 我在B.dll 怎么获取到 加载我的模块的路径呢?GetModuleFileName 这个第一个参数如果填NULL获取到的肯定是 test.exe 的路径 也就是进程的启动路径 c盘我们要获取到加载我们的dll 路径要这样获取在B.dll 加入以上代码 调用 GetProgramDir() 函数返回的就是 A原创 2020-07-31 11:17:25 · 630 阅读 · 1 评论 -
c++ int main(int argc, char* argv[]) char* argv[] 作用
前言:惭愧了 写了2年多的代码的 连天天接触的main 函数 参数还没搞清楚int main(int argc, char* argv[]){}这个大家都很熟悉吧 char*argv[] 是干啥的呢?我现在才知道比如 我们项目生成名字叫 test.exe那么 我在cmd 命令行输入test.exe Run “C:xx//xx.exe”那么 char*argv[]就是char 的数组 接到是命令行的输入 以空格分隔成一个个的参数char[0] = “test.exe” 是程序原创 2020-05-24 17:52:04 · 359 阅读 · 3 评论 -
c++ 预编译头文件作用
前言:最近项目都要加预编译头 #include “stdafx.h” 我对预编译理解也不是很清晰,今天周末 查了一下 具体的作用文章写的比较清晰就转载过来了转载:https://blog.csdn.net/libaineu2004/article/details/91428595...转载 2020-05-24 17:46:58 · 458 阅读 · 0 评论 -
c++ 彻底搞懂 wchar_t WCHAR LPCSTR PCSTR TCHAR
前言:最近在搞 win32api 有很多的变量根本不认识WCHAR LPCSTR PCSTR TCHAR L" "这都是啥东西弄的稀里糊涂的这里写个笔记 巩固一下基础首先我们要先了解一下字符编码unicode utf-8 Ansi 然后我们还要了解一下wchar_tstd::wstringstd::string 与 std::wstring 互转换也就是宽字符wchar_t 是占2字节 char 是1字节一个字节 8位 wchar_t 就是 16位char 就是 8位o原创 2020-05-22 16:16:49 · 5059 阅读 · 0 评论 -
c++ win32API 【CreateThread】创建线程
前言:最近项目使用vs2010 还没有 std::thread到 vs2013 才有集成的 std::thread 吧用了一下 win32API 创建了一个简单的线程这里简单写个demo 介绍一下 也当做一个笔记下面的不管 我没有调用这个就是他的参数 咱们挨个介绍一下第一个参数是安全属性,一般设为null,使用缺省的安全属性。当我们想此线程有另外的子进程时,可改变它的属性。第二个参数是线程堆栈尺寸,一般设为0,表示与此应用的堆栈尺寸相同,即主线程与创建的线程一样长度的堆栈。并且其长度会原创 2020-05-22 15:00:02 · 1254 阅读 · 0 评论 -
std::string 与 std::wstring 互转
前言:最近接触了一些 win32 方便的编程,由于不熟 可能会写一写这方便的基础东西 相当于写日记了 提升一下他们的声明string 是 charwstring 是wchar_t什么是wchar_t ?string 转 wstringinlinestd::wstring StringToWString(const std::string& str){ int len = MultiByteToWideChar(CP_UTF8, 0, str.c_str(), -1, NUL原创 2020-05-22 14:36:59 · 6197 阅读 · 0 评论 -
c++ 宏定义 define # 与 ## 的作用
前言:在看一些源码中 他们的宏定义 出现了 下面的 # 与 ##我看不懂 就了解了一下 宏定义 中 # 与 ## 的作用我定义了一个 宏调用 qdebug 输出一下 这个变量的值我相信这个大家都能看懂 我稍微改一下‘#’在 前面加个 # 咱们来输出一下区别出来了 #param加上 # 其实就相当于把 参数的名字 写进去 变成字符串这个可以看懂吧 在...原创 2020-04-07 18:32:49 · 677 阅读 · 0 评论 -
c++ 尽可能延后变量定义式的出现时间
参考 effective c++ 条款 26c++ 尽可能延后变量定义式的出现时间前言:只要定义一个变量而其类型带有个构造或者析构,那么当程序的控制流也就是执行到这句变量定义时那么就要承担构造的成本,当变量离开这个作用域时,就要承担析构的成本。即使这个变量你没有使用,任然需要耗费这些成本,所以应该尽可能的避免这种情形。或许 你认为 你不可能定义一个 不使用的变量 。看下面!st...原创 2020-03-30 18:08:56 · 252 阅读 · 0 评论 -
c++ 避免遮掩继承而来的名称
参考 effective c++ 条款33我觉得看完书中的 总结一下感觉就是在讲作用域的规则,在继承中作用域的规则编译器查找同名变量函数的规则double num = 5; //global 变量int main(){ int num = 3; //local 变量 cout << num << endl;}运行结果大家都知道是 3编译器在...原创 2020-03-26 15:44:14 · 316 阅读 · 0 评论 -
c++ 千万不要在构造或者析构中调用 virtual函数
假设我们写个模拟股市交易的类这个类每创建一个对象 都必须写一个log我们实现了个抽象类 因为不同的交易信息不同的logclass Transaction{public: Transaction() { log(); } virtual void log()const = 0;};class BuyTransaction :public Transaction{pub...原创 2020-03-24 18:32:32 · 254 阅读 · 0 评论 -
c++ 若不想用编译器自动生成的函数,就应该明确的拒绝
看 effective c++ 里面说地产中介卖房子 中介软件系统有个类class来描述代售的房子class HomeForSale{ ''''''}房产中介都会说自己家的房子都是独一无二的 所以这个类不允许拷贝构造和赋值也就是HomeForSale h1;HomeForSale h2(h1); /// 编译器应该报错 不允许拷贝构造HomeForSale h3;h3...原创 2020-03-24 17:51:25 · 609 阅读 · 0 评论 -
c++ 必须返回对象时,别妄想返回其 reference(引用)
上一章 说了 尽量以传引用的方式 代替 传值上一篇本篇说一下 有些地方是不能返回引用的 !参考 effective c++ 21条款自从上一篇说了 传const引用要比传值效率高多了我们就想在所有的地方都使用 pass -by - reference ,保证纯度我们就犯了致命的错误 传递一些 reference 指向一些并不存在的对象 。看个类class Rational{pu...原创 2020-03-24 15:38:18 · 448 阅读 · 0 评论 -
c++ 用传引用(pass - by - const reference )的方式 替代传值(pass - by - value)
参考 effective c++缺省情况下 c++ 函数传递值是传值的形式 比如void text(string text){ /// do something ///}string t = "abcd";text(t);这样其实会传的实际参数的副本 , 编译器为我们 把t 复制了 一份 里面 do something 不会对 外面的t 有任何的影响 。这样做有什么坏处...原创 2020-03-24 14:26:33 · 625 阅读 · 0 评论