C++
文章平均质量分 93
breaksoftware
这个作者很懒,什么都没留下…
展开
-
C++拾趣——转换编译器生成的类型名为代码中的类型名
在软件开发中,特别是在使用C++这类静态类型语言时,编译器在编译过程中会生成许多内部表示,包括类型信息。这些内部类型名通常用于编译器的内部处理,比如类型检查、优化和代码生成等。然而,在编写源代码或进行调试时,我们更习惯于使用人类可读和易于理解的类型名。比如我们不太能看懂,但是可以看懂。因此,将C++编译器生成的类型名转换成代码中的类型名具有多方面的必要性:提高代码的可读性。源代码中的类型名应该清晰地反映其意图和用途,以便于开发者和维护者理解。原创 2024-08-20 00:15:00 · 2301 阅读 · 0 评论 -
C++拾趣——使用VSCode跨平台调试CMake编译的C/C++项目
VSCode的远程开发功能为开发者带来了诸多好处,极大地提升了开发效率和灵活性。首先,它允许开发者在本地编辑环境中直接连接到远程服务器或容器进行代码开发,这样就不需要在本地机器上搭建完整的开发环境,节省了大量的时间和精力。无论是使用SSH连接到远程Linux服务器,还是在Docker容器中进行开发,VSCode都提供了无缝的集成和便捷的操作体验。远程开发的好处不仅在于节省时间,还在于它提供了跨平台的支持。原创 2024-08-17 00:15:00 · 1452 阅读 · 0 评论 -
C++拾趣——编译器预处理宏__COUNTER__的应用场景
在C++中,是一个特殊的预处理宏,它主要被用来生成唯一的整数标识符。这个宏是由一些编译器(如GCC和Visual Studio)内置支持的,而不是C++标准的一部分。它的主要应用场景是在宏定义中,用于确保每次宏实例化时都能获得一个唯一的标识符,这在处理模板元编程、避免名称冲突或生成唯一标识符等场景中特别有用。宏每次,都会返回一个从0开始的连续递增的整数值。这意味着,在代码的不同部分或不同文件中使用时,它都能保证生成唯一的整数。这对于在编译时生成唯一的变量名、函数名或枚举值等非常有帮助。需要注意的是,因为。原创 2024-08-16 00:15:00 · 861 阅读 · 0 评论 -
C++拾趣——使用stl标准库生成等差、等比数列的方法
代码是思想的表达。阅读代码是一个猜测、求证的过程。这个过程非常费脑,所以人们都不喜欢啰啰嗦嗦的表达方式。于是在相同认知水平下,简洁高效的表达是喜闻乐见的。本文将抛砖引玉,通过一些案例讲解如何去简化代码。(转载请指明出于breaksoftware的csdn博客)关系数列等差数列 比如我们要构建的序列存储的值是0,1,2,3,4……9999。常规写法...原创 2018-10-12 13:17:48 · 7383 阅读 · 1 评论 -
C++拾趣——STL容器的插入、删除、遍历和查找操作性能对比(ubuntu g++)——插入
操作系统是ubuntu 18.04.1 server amd64,gcc是7.3.0。编译产出是64位测试程序。(转载请指明出于breaksoftware的csdn博客) 因为加入测量,就会导致误差。我已经尽量将环境影响降低,但是还是难免有误差。大家可以通过文后附的工程自行测量,结果可能和我存在一定的出入。 文中将测试vector、list、f...原创 2018-10-05 17:05:57 · 1303 阅读 · 1 评论 -
C++拾趣——使用多态减少泛型带来的代码膨胀
泛型编程是C++语言中一种非常重要的技术,它可以让我们大大减少相似代码编写量。有时候,我和同事提及该技术时,称它是“一种让编译器帮我们写代码的技术”。(转载请指明出于breaksoftware的csdn博客) C++是一门静态语言,它最终的编译成果是可以直接运行于冯诺依曼体系的计算机上,而不像其他动态语言,可以运行于虚拟机等容器中。由于对运行效率得追求,C++也是...原创 2018-09-01 15:05:38 · 1177 阅读 · 1 评论 -
从0开始搭建编程框架——插件
我将插件设计为两种类型。一种是框架自身携带的插件,用于增强其基础能力。一种是用户自定义插件,用于完成业务。本文将分别介绍在peleus框架下,这两种插件该怎么写。(转载请指明出于breaksoftware的csdn博客) 本文谈下框架自身携带的插件怎么写。我们以操作mysql为例。 第一步把mysqlclient开发环境给准备好。Wget ...原创 2018-08-15 16:36:33 · 623 阅读 · 0 评论 -
从0开始搭建编程框架——主框架和源码
一个良好的结构是“对修改关闭,对扩展开放”的。(转载请指明出于breaksoftware的csdn博客) 这个过程就像搭建积木。框架本身需要有足够的向内扩展能力以使自身有进化能力,其次要有足够的外向扩展能力以使其可以方便定制业务。一般来说,我们让使用者继承框架暴露的接口,或者填充一些配置项以达到“扩展”的目的。 对内部分,我们称为模块(modul...原创 2018-08-14 16:55:22 · 3779 阅读 · 0 评论 -
从0开始搭建编程框架——思考
需求来源于问题。(转载请指明出于breaksoftware的csdn博客) 之前有个人做前端开发的同学在群里问“C语言能做什么?能写网页么?”,然后大家就开始基于这个问题展开争辩。有的认为是“不能,从来没听说过C语言能写网页”;有的说“能,连浏览器都是C写的”。我想这是基于不同层面做出的回答。如果仅仅从语言层面来说,C的确写不出网页。但是从底层来说,C语言是可以做...原创 2018-08-14 16:55:09 · 1304 阅读 · 0 评论 -
C++拾趣——STL容器的插入、删除、遍历和查找操作性能对比(ubuntu g++)——删除
相关环境和说明在《C++拾趣——STL容器的插入、删除、遍历和查找操作性能对比(ubuntu g++)——插入》已给出。本文将分析从头部、中间和尾部对各个容器进行删除的性能。(转载请指明出于breaksoftware的csdn博客)删除头部删除元素个数>15000erase_begin_16384_highest vector容器性能最差。...原创 2018-10-05 17:06:08 · 1310 阅读 · 1 评论 -
C++拾趣——STL容器的插入、删除、遍历和查找操作性能对比(ubuntu g++)——遍历和查找
相关环境和说明在《C++拾趣——STL容器的插入、删除、遍历和查找操作性能对比(ubuntu g++)——插入》已给出。本文将分析各个容器中遍历和查找的性能。(转载请指明出于breaksoftware的csdn博客)遍历从前往后元素个数>15000traversal_begin_16384_highest 表现最差的是unordered_m...原创 2018-10-05 21:21:25 · 1931 阅读 · 1 评论 -
C++拾趣——STL容器的插入、删除、遍历和查找操作性能对比(Windows Visual Studio)——插入
操作系统是Windows10 64bit,编译器是 Microsoft Visual Studio Community 10。编译产出是64位测试程序。(转载请指明出于breaksoftware的csdn博客) 因为加入测量,就会导致误差。我已经尽量将环境影响降低,但是还是难免有误差。大家可以通过文后附的工程自行测量,结果可能和我存在一定的出入。 ...原创 2018-10-05 23:59:58 · 1707 阅读 · 2 评论 -
C++拾趣——STL容器的插入、删除、遍历和查找操作性能对比(Windows Visual Studio)——删除
相关环境和说明在已给出。本文将分析从头部、中间和尾部对各个容器进行删除的性能。原创 2018-10-06 00:41:25 · 2535 阅读 · 1 评论 -
C++拾趣——STL容器的插入、删除、遍历和查找操作性能对比(Windows Visual Studio)——遍历和删除
相关环境和说明在《C++拾趣——STL容器的插入、删除、遍历和查找操作性能对比(Windows Visual Studio)——插入》已给出。本文将分析各个容器中遍历和查找的性能。(转载请指明出于breaksoftware的csdn博客)遍历从前往后traversal_begin_16384_highest 性能最差的是map、multimap、set和...原创 2018-10-06 01:17:46 · 1468 阅读 · 1 评论 -
C++拾趣——使用stl标准库实现排序算法及评测
今天看了一篇文章,讲各种语言的优势和劣势。其中一个观点:haskell非常适合写算法,因为使用者不用去关心具体的计算机实现,而只要关注于操作语义。这让它在专心研究算法的人中非常受欢迎。所以很多时候,语言的争论没有太多的意义,有意义的是它适不适合某些场景或者某些人。(转载请指明出于breaksoftware的csdn博客) 目前在网上讨论排序算法更多是C语言实现的。...原创 2018-10-18 22:00:17 · 2365 阅读 · 2 评论 -
C++拾趣——Linux下实测布隆过滤器(Bloom filter)和unordered_multiset查询效率
布隆过滤器是一种判定元素是否存在于集合中的方法。其基本原理是使用哈希方法将数据映射到一个很长的向量上。在维基百科上,它被称为“空间效率和查询时间都远远超过一般的算法”的方法。由于它只保存散列的数据,所以对于很长的数据有着良好的压缩特性,这个是个不争的事实(可以参见《布隆过滤器 (Bloom Filter) 详解》)。但是其查询效率究竟如何,我们还是要实际测试一下。(转载请指明出于b...原创 2018-12-26 20:26:02 · 1206 阅读 · 1 评论 -
C++拾取——stl标准库中集合交集、并集、差集、对称差方法
STL库中有丰富的集合运算方法,我们可以使用它们快速完成交集、并集、差集、对称差集的运算。(转载请指明出于breaksoftware的csdn博客)交集(intersection) 交集是集合运算中经常会用到的计算,其表达是两个集合共有的部分(图中红色区域) STL中有set_intersection方法可以实现该功能。它是C++17开始...原创 2019-04-02 23:44:00 · 7454 阅读 · 3 评论 -
使用Boost的Serialization库序列化STL标准容器
使用Boost做对象序列化是非常方便的,本文将介绍一种序列化STL标准容器的方法。 这是之前设计的异步框架的一个子功能:过程A将标准容器数据序列化成二进制流,然后将该二进制数据发送到过程B,过程B将数据反序列化为标准容器。(转载请指明出于breaksoftware的csdn博客) 下面这个基类支持vector、set、unordered set、mult...原创 2018-06-22 19:26:31 · 8062 阅读 · 0 评论 -
C++拾趣——有趣的操作符重载
“有趣”并不是胡闹,所以本文探讨的将是“符合常识”的重载。而那些“天马行空”的重载,比如重载==为“不等于”则不是本文的议题。原创 2018-06-13 17:28:09 · 601 阅读 · 0 评论 -
Windows客户端C/C++编程规范“建议”——函数
本文涉及C++编程中函数规范的相关建议原创 2014-07-22 23:02:40 · 2826 阅读 · 0 评论 -
Windows客户端C/C++编程规范“建议”——前言
工作中接触了很多编程规范。其中最有意思的是,公司最近发布了一版C/C++编程规范,然后我看到该规范的最后一段时,有这么一句“该规范不适用于Windows平台开发”。心想:做Windows开发的人都干嘛去了。原创 2014-07-22 20:10:05 · 2155 阅读 · 0 评论 -
Windows客户端C/C++编程规范“建议”——函数调用
本文涉及C++编程中函数调用相关规范的相关建议原创 2014-07-22 23:09:25 · 1876 阅读 · 0 评论 -
Windows客户端C/C++编程规范“建议”——宏
本文涉及C++编程中宏的规范相关建议原创 2014-08-01 23:15:15 · 2153 阅读 · 0 评论 -
Windows客户端C/C++编程规范“建议”——结构
本文涉及C++编程中结构的规范相关建议原创 2014-08-01 23:14:31 · 2124 阅读 · 0 评论 -
Windows客户端C/C++编程规范“建议”——表达式和运算
本文涉及C++编程中表达式和运算的规范相关建议原创 2014-08-01 23:11:31 · 1939 阅读 · 0 评论 -
Windows客户端C/C++编程规范“建议”——文件
7 文件7.1 正确使用#include 等级:【推荐】说明:#include <>和#include “”导致编译器在搜索文件时,搜索的路径顺序不同。所以需要正确使用#include,以避免包含错了头文件。语法形式 操作 带引号的形式 预处理器按以下顺序搜索包含文件: 在包含 #include 语句的文件所在的同一目录中。 在当前打开的包...原创 2014-08-01 23:15:58 · 2329 阅读 · 4 评论 -
Windows客户端C/C++编程规范“建议”——变量和常量
本文涉及C++编程中变量和常量的规范相关建议原创 2014-09-07 16:19:10 · 2045 阅读 · 0 评论 -
Windows客户端C/C++编程规范“建议”——风格
本文涉及C++编程风格规范的相关建议原创 2014-09-07 16:19:32 · 4311 阅读 · 0 评论 -
C++的四种强制转换
C++的四种强制转换 C++中的四种转换,是一个老生常谈的话题。但是对于初学者来说,该如何选择哪种转换方式仍然会有点困惑。而且我总是觉得“纸上得来终觉浅”,于是便“绝知此事要躬行”。于是利用闲暇时光,整理一下reinterpret_cast、const_cast、static_cast和dynamic_cast这四种强制转换的相关知识。(转载请指明出于breaksoftware的...原创 2014-12-16 12:39:45 · 29419 阅读 · 2 评论 -
使用C++实现一套简单的状态机模型——实例
一般来说,“状态机”是一种表达状态转换变换逻辑的方法。曾经有人和我讨论过为什么不直接用ifelse,而要使用“状态机”去实现一些逻辑,认为使用“状态机”是一种炫技的表现。然而对于大型复杂逻辑的变化和跳转,使用ifelse将带来代码难以阅读等弊端。其实ifelse也是一种状态机实现的方式。 之前我们有个业务和操作系统有着强烈的关联,而我们希望比较清晰地描述整个业务中...原创 2015-03-07 22:38:33 · 11514 阅读 · 2 评论 -
使用C++实现一套简单的状态机模型——原理解析
在上一文中,我们介绍了该状态机模型的使用方法。通过例子,我们发现可以使用该模型快速构建满足基本业务需求的状态机。本文我们将解析该模型的基础代码,以便大家可以根据自己状态机特点进行修改。(转载请指明出于breaksoftware的csdn博客) 该模板库的基础方法实现在之后给出的工程的AutoStateChart.h中,该文件一共215行,其中有16行是辅助调试代码...原创 2015-03-07 22:40:12 · 10467 阅读 · 7 评论 -
使用程序解决一道逻辑推理题
今天看朋友发了一个老问题,一道很有意思的推理题:(转载请指明出于breaksoftware的csdn博客) 小明和小强都是张老师的学生,张老师的生日是M月N日,2人都知道张老师的生日是下列10组中的一天: 3月4日 3月5日 3月8日 6月4日 6月7日 9月1日 9月5日 12月1日 12月2日 12月8日原创 2013-03-14 20:55:20 · 5241 阅读 · 2 评论 -
C++拾趣——类构造函数的隐式转换
之前看过一些批判C++的文章,大致意思是它包含了太多的“奇技淫巧”,并不是一门好的语言。我对这个“奇技淫巧”的描述颇感兴趣,因为按照批判者的说法,C++的一些特性恰巧可以让一些炫耀技术的同学有了炫耀的资本——毕竟路人皆知的东西却没什么好炫耀的。这又让我想起了《孔乙己》中关于“回”字有几种写法的描述。当时老师在上此课时,是抱着批判的态度去评价孔乙己的这种思想,而我却感觉到这其中必有一...原创 2017-02-08 12:33:46 · 6021 阅读 · 8 评论 -
C++拾趣——C++11的语法糖auto
C++是一种强类型的语言,比如变量a,如果声明它是整型,则之后只能将它作为整型来用。这和其他弱类型的语言有很大的区别,比如python中,我们可以让a在第一行是个整型,第三行是一个字符串。(转载请指明出于breaksoftware的csdn博客)a = 3print aa = "3"print a C++代码在声明一个变量时就已经明确指定了它的类型。这...原创 2018-01-22 19:01:13 · 1727 阅读 · 0 评论 -
Linux下HOOK动态链接库中API的方法
2012年,我写了一篇介绍Windows系统下Ring3层API的hook方案——《一种注册表沙箱的思路、实现——Hook Nt函数》,其在底层使用了微软的Detours库。5年后,我又遇到这么一个问题,但是系统变成了Linux。我最开始的想法是找一个Linux下的Detours库,于是找到了subhook。其原理是:修改被Hook函数起始地址处的汇编代码,让执行流程跳到我们定义的...原创 2017-08-23 21:49:10 · 6825 阅读 · 4 评论 -
Windows客户端C/C++编程规范“建议”——指针
本文涉及C++编程中指针规范的相关建议原创 2014-07-22 23:06:53 · 2048 阅读 · 0 评论