随笔分类 - C++
有关C++中的常见问题
摘要:在论坛上看见一个问题,比较有意思,记录下 原帖: Casting inside a ternary operator causes underflow 问题代码: #include <iostream> int main() { int64_t res; int some_val = 5; if (
阅读全文
摘要:在逛论坛看见一个有意思的帖子,有点意思,记录下 关于"异常捕捉"(try catch)是否存在悖论? 一些我觉得有用的回复,放到下面了, 1. 当某些错误状况难以完全避免时,try-catch 可以用来控制错误扩散范围,防止整个程序崩溃。比如外部系统异常、网络中断等不可控因素。 2. 对于业务逻辑复
阅读全文
摘要:最近在看谷歌的 C++ 风格指南发现了一些有意思的知识点,遂记录下 1. 第六章第二小节介绍了右值引用 只在定义移动构造函数与移动赋值操作时使用右值引用. 不要使用 std::forward. 定义: 右值引用是一种只能绑定到临时对象的引用的一种, 其语法与传统的引用语法相似. 例如, void f
阅读全文
摘要:一直惦记着 std::shared_ptr 线程安全的问题,看了些文章后,又怕过段时间忘记了,遂记录下来 std::shared_ptr 的线程安全问题主要有以下两种: 引用计数的加减操作是否线程安全 std::shared_ptr 修改指向时是否线程安全 第一个问题的答案: 是线程安全的,因为是原
阅读全文
摘要:项目上有个需求要用到 std::queue 顺序处理消息事件 简单的示例如下: struct MyEvent { MyEvent() { event_ = CreateEvent(nullptr, 0, 0, 0); } ~MyEvent() { std::cout << "MyEvent deco
阅读全文
摘要:最近线上 PK 偶然出现双方主播互相听不见声音的情况,在日志不能明确体现问题时,就需要抓下主播本地的音频和远端的音频来确定数据是在哪消失的 所以我们用到一个比较简单的流写出的标准库类:std::ofstream 通过 std::ofstream 类,可以创建一个用于写入文件的输出流对象,可以将数据写
阅读全文
摘要:虚基类(Virtual Base Class)在面向对象编程中的作用是解决多重继承中的菱形继承问题(Diamond Inheritance Problem)和共享基类问题(Shared Base Class Problem)。 菱形继承问题是指当一个类以多种路径继承自同一个基类时,会导致该基类在派生
阅读全文
摘要:看陈皓的博客后,发现这一点,以前都没注意过,也是因为没这样用过 陈皓叔 R.I.P... 见下面代码: #include <iostream> class Base { int b; public: virtual ~Base() { std::cout << "B::~B()" << std::e
阅读全文
摘要:看 SO 上有一个比较奇怪的问题, When does an rvalue reference result in a move vs copy constructor and why? 问题代码: ClassX c = std::move(object_c); // Invokes move co
阅读全文
摘要:最近接到一个需求,使用 sdk 提供的消息回调,一般我们是继承 sdk 的消息类,然后 sdk 的消息回调(虚函数)会在有消息的时候调用回调指针,从而触发回调 不过因为 sdk 那边又对该消息类二次封装了并提供了一些接口,所以在研究二次封装的方法时,遇到了一些有意思的问题,故记录下 typedef
阅读全文
摘要:前文提到了 CMake 学习 文末基本涵盖了我遇到的编译问题,但是在得到一个编译好的 .lib 文件后,还需要放到项目中引用成功后才算真正的完成静态库的编译 嗯,我之所以说这些是因为我在项目中链接静态库时出现了 LNK2019 经典错误 错误如下: Libraryd.lib(at_exit.obj)
阅读全文
摘要:最近有一个多个 .h .cc .cpp 编译成静态库的需求,故记录下过程 静态库不同于动态库,它不需要 main 入口,只要各个源文件与头文件能对应,也就是源文件和头文件引用的头文件能够找到函数的符号文件,即可编译成功 新手教程参考: CMake 中文版 CMake 英文版 因为只需要用到部分源文件
阅读全文
摘要:按照之前我写的文章教程,可以很简单的编译出静态库(仅供学习交流) 编译 windows 上的 qt 静态库 编译出静态库后,替换旧版本的库,见我另一篇文章教程 VS2019 配置 QT 库 之所以没有直接上 Qt6.0 以上的版本,是因为 Qt6.0 对比 Qt5 删减了不少东西(我之前已经测试过了
阅读全文
摘要:遵循四个原则, 1) 程序执行一个函数时,就创建一个新的受保护的独立空间(新函数栈) 2) 函数的局部变量是独立的,不会相互影响 3) 递归必须向退出递归的条件逼近,否则就是无限递归,死龟了:) 4) 当一个函数执行完毕,或者遇到 return,就会返回,遵守谁调用,就将结果返回给谁。 斐波那契数列
阅读全文
摘要:给一段音频数据,计算它的样本数 假设一双声道的音频数据为 buffer,buffer 大小为 buffer_size,采样位数为 16 位(一般都是 16),一个采样点占 2 个字节 也就是说这样的音频流在内存中的排列是这样的, 左声道和右声道各占两个字节(4个字节代表一个双声道),假设 buffe
阅读全文
摘要:最近在处理一个字符串转码问题,故记录一下过程 该需求是外部 sdk 的一个 api 需要一个 char* 字符串路径入参,我以往是将宽字符串转为 UTF8 后再传给 sdk 这次这个 api 似乎不接受 UTF8 编码的字符串路径,于是我改用系统编码传参作测试,也就是将 GB2312 编码的字符串路
阅读全文
摘要:这个错误通过某度没找到合适的解决方案,故记录下来 其实如果使用 google 搜索错误的英文关键词,大概第一条就是解决问题的链接 Large number of "'function' is not a member of 'std'" errors #435 我在这里记录的是遇到问题的过程,我们项
阅读全文
摘要:想写点东西,又不知道要写啥,看着随笔 299 篇,想着凑到 300 好了 这几天看了很多人的年终总结,都写的很精彩 我这边就随便唠唠好了,想到啥就写啥,都是真实的事情 说来也搞笑,我大学专业是自动化数控技术,跟现在用的 C++ 编程基本毫无关系,大学里就是画图,单片机,数模组,再就是机床实习。 因为
阅读全文