-
在C++中使用有符号数作为容器下标
在C++20中引入了
std::span特性,针对容器下标和容器大小该使用有符号数signed还是无符号数unsigned,大家开始讨论。综合来看,在旧标准的设计中使用无符号数作为容器下标是有历史原因的;但是在后来的使用中也发现了许多弊端。最终,在C++20标准下
std::span仍然使用了无符号数作为大小和下标类型。但是讨论的过程很有意思,也让我在后续的开发中思考有符号数和无符号数的使用。 -
记录一次TCP异常分析
最近在排查一个TCP异常现象,有很多收获,加深了我对TCP的理解,在这里记录一下。
-
将界面窗口置顶显示
最近需要实现一个功能,在启动第二个程序实例时将主界面窗口置顶显示。界面程序是基于Qt开发的,在Windows操作系统上实现窗口置顶需要一些特殊的处理。
-
Qt连接匿名函数的踩坑记录
今天在调试代码时遇到了一个有趣的问题,值得仔细思考。
-
检查C字符串为空
在C语言中如何检测字符串为空字符串,最近看到twitter上有对此问题讨论,让我学习到了很多新的知识点。
-
删去不需要的windows右键菜单
一些软件会向 windows 右键菜单中增加功能条目,当我们不需要这些功能时可以删掉他们。
-
结构体字节对齐的陷阱
pragma pack的功能是设定结构体内成员变量的字节对齐方式。它在使用时有一个易错点,而且出错后排查起来还非常不容易。 -
如何检测TCP连接的异常断开
在以往的开发中,我会通过
recv()接口的返回值来判断连接是否断开。但有时候我发现TCP连接已经无法正常收发数据了recv()的返回值仍然不是0。 -
由new创建的指针不需要检查nullptr
我们会检查空指针来判断指针是否有效。一直以来,在申请动态内存后,我都会习惯性地检查得到的指针是否为空,但是查阅了一些资料后发现这个操作是多余的。
-
在运行时获取动态库的路径
最近在开发一个动态库,这个动态库需要在运行时动态地加载另一个动态库。在库发布时会同时提供这两个动态库。库的使用者会主动加载第一个动态库,问题出现在第一个动态库加载第二个动态库时,如何确定第二个动态库的位置。
-
C++头文件的引用顺序
一般在C++开发中,会使用头文件(
.h/hpp)和源文件(.cpp/cxx)将函数的声明和实现分开。当需要使用某个函数时,将声明函数所在的头文件引用进来即可。在较复杂的项目中会引用很多头文件,这些头文件可能来自于标准库、操作系统相关库、第三方库和自身项目。在实际开发过程中,多个头文件的引用顺序通常并不会有很大的影响;但是从编码风格和项目维护等方面考虑,头文件的引用顺序确是值得注意的。 -
常见的中文乱码示例
中文乱码通常是由字符集不匹配导致的。例如,以utf-8字符集保存的文本以gbk方式打开就会出现乱码。有网友将常见的乱码情况总结成了表格,我将其保存下来,以后再遇到乱码时查阅起来就更加方便了。