![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
jianminfly
这个作者很懒,什么都没留下…
展开
-
一些常用算法整理
void mySwap(int* pa, int* pb) { * pa ^= *pb;// 异或 * pb ^= *pa; * pa ^= *pb;}void selectSort(int* p, int n) { int idx; for (int i = 0; i < n - 1; i++) { idx = i; for (int j = i + 1; j < n; j++) {原创 2021-07-06 18:16:08 · 85 阅读 · 0 评论 -
libaom解码时崩溃的问题分析
一、背景一个libaom编码格式视频令播放器在解码阶段崩溃,起初以为是该视频B帧过多导致CPU运算量太大,进而导致崩溃,后来发现该格式并不像h264一样存在I P B帧,于是进行了进一步分析。。。播放器依赖库:ffms2.lib avisynth.lib ffmpeg相关lib二、分析过程a. 因为崩溃源头在ffms2库中的解码过程中,所以第一反应是该开源库未同步到最新版导致b. 编写测试demo,分别测试当前的ffms2库和最新版的库,发现在解码该视频时均会在同一位置崩溃c. 在ff原创 2021-06-21 21:30:23 · 358 阅读 · 0 评论 -
为什么用const可以解决全局变量重定义
一、背景偶然发现当在头文件中定义全局变量时,如果未声明为const会出现变量重定义,这个很容易理解,因为头文件被多次引用了,那问什么声明为const就可以呢?我的项目结构如下header.hconst string A = "hello";--A.cpp---header.h--B.cpp---header.h二、分析摘录C++ primer中的一段话:当以编译时初始化的方式定义一个const对象时,就如对bufSize的定义一样:const int bufSize = 512原创 2021-06-11 10:53:45 · 1980 阅读 · 0 评论 -
windows下bmp文件读写操作
一、读引用自 https://www.cnblogs.com/nowornever-L/p/6421776.html#include <iostream>#include <windows.h>#include <stdio.h>using namespace std;int bmpwidth, bmpheight, linebyte;unsigned char* pBmpBuf; //存储图像数据bool readBmp(const char*原创 2021-05-10 09:55:29 · 586 阅读 · 0 评论 -
c语言 uint8_t与uint32_t相互转换
一、uint8_t转uint32_tuint8_t var1 = 0x12;uint8_t var2 = 0x34;uint8_t var3 = 0x56;uint8_t var3 = 0x78; uint32_t bigvar = (var3 << 24) + (var3 << 16) + (var2 << 8) + var1;// bigvar=0x78563412二、uint32_t转uint8_tuint8_t p[4];uint原创 2021-04-14 10:08:27 · 11215 阅读 · 2 评论 -
Linux 下bmp文件的读写操作
1.写操作int bmp_write(unsigned char* image, int imageWidth, int imageHeight, const char* filename){ long extrabytes = 4 - ((imageWidth * 3) % 4); if (extrabytes == 4) extrabytes = 0; long paddedsize = ((imageWidth * 3) + extrabytes) * imageHeight; unsi原创 2021-03-10 14:46:19 · 1066 阅读 · 1 评论 -
C++新标准库学习笔记
移动构造1.解决临时对象问题2.被拷贝对象立即释放,避免一个堆内存多个引用class A{…}A getTemp(){return A(); )int main(){A && a = getTemp();//会调用两次移动构造}3.自己实现移动构造时,默认拷贝被删除。自己实现拷贝构造,默认移动构造会被删除4.A func(){return A();}// 首先构造一个A,然后调用拷贝构造或者移动构造A a = func();// 再调用一次拷贝构造或者移动构造原创 2020-08-28 17:55:56 · 119 阅读 · 0 评论 -
enable_shared_from_this类的用法
在官方文档上找了个例子,然后深入剖析了一下struct Good : std::enable_shared_from_this<Good> // note: public inheritance{ std::shared_ptr<Good> getptr() { return shared_from_this(); }};struct Bad{ std::shared_ptr<Bad> getptr() {原创 2020-08-21 09:55:00 · 413 阅读 · 0 评论 -
const变量修改与volatile
一、背景有时候在写一些测试代码的时候,偶尔会出现需要修改const变量的操作,在通过指针或者引用修改const变量后,居然可以编译成功。于是就引起了困惑——既然可以修改,那const声明的意义何在呢?二、测试看下面的代码const int i = 12;int& j = (int&)i;j = 15;std::cout << i << " " << j;// 12 15将会输出 12 15.为什么呢(不使用引用,改成指针,结果也原创 2020-07-01 10:40:14 · 475 阅读 · 0 评论 -
C++ 读取UTF8编码,调试过程显示乱码问题
1.原因std::string不支持utf8编码,因此在调试器中看到的是乱码,并且使用一些不支持utf8编码的api判断该字符串对应的文件路径时,也会判定失败。所以要想在调试过程中正常显示utf8编码的中文内容,就要把字符串转换成gbk编码2.解决string UTF8ToGB(const char* str){ string result; WCHAR* strSrc; LPSTR szRes; //获得临时变量的大小 int i = MultiByteToWideChar(CP_UT原创 2020-05-18 09:58:25 · 3491 阅读 · 1 评论 -
嵌套从属模板类型
今天在看spdlog的源码的时候,发现了一个重要的知识点——嵌套从属模板类型,示例代码如下struct synchronous_factory{ template<typename T> static auto create(T arg){ return 1; }};template<typename Factory = synchronous_factory...原创 2020-03-06 11:24:56 · 548 阅读 · 0 评论 -
for循环中右值引用解析
经常看到有for(auto &&p : range)的写法,但是不知道为什么这里要用右值引用,今天深究了一下。vector< bool>的内存空间为节约存储,是按bit存储的,而不是byte,所以当vector< bool> c{false}; auto p = c[0] 时p的类型是一个std::vector< bool>:reference...原创 2020-02-26 21:39:46 · 1535 阅读 · 3 评论 -
webrtc---流程梳理总结
1.接收通话 1.接收到消息onhanginread 2.来自其他peer的消息 onmessagefrompeer 3.初始化peerconnection 1.CreatePeerConnectionFactory 用来创建音轨和视频轨 2.peer_connection_factory_->CreatePeerConnection 根据turn服务器的参数创建co...原创 2019-07-22 10:12:55 · 1252 阅读 · 0 评论