![](https://img-blog.csdnimg.cn/20210618230446292.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
南小馆
文章平均质量分 82
尽管我们已经非常熟悉c++的指针、引用、类型转换、数组等这些内容,但总会难免出错,例如对数组使用多态,这是非常糟糕的。在面对c++如此繁多的特性,偶尔也是进退两难。为此,我把在工作、学习中非常有用心得记录在此。
南城小馆
一念不起以至于无念
展开
-
使用RAII技术简化代码耗时统计
使用RAII技术进行耗时统计,就像std::lock_guard那样, 只要模板参数类型包含begin()和end()函数。在RAII的模板类的构造函数中调用begin()函数,在析构函数中调用end()函数。通过在end()函数中实现不同的功能,就可以轻松实现需要统计单次耗时、多次总耗时、多次中的最小耗时、多次中的最大耗时,甚至是多次的平均耗时等功能。原创 2024-01-19 17:20:17 · 955 阅读 · 0 评论 -
c++中位域简介
位域列表中各个元素的描述:tpye: 类型只能是int(整型),unsigned int(无符号整型),signed int(有符号整型) [name]: 位域的名字,遵循变量的命名规则,[]方括号是可选的,如果没有名字,那么代表空域,该位域是不可用的,类似于占位width: 位域占这种类型的多少个位,width 的大小应该小于等于type类型所占内存大小,比如int 32位, width 必须小于等于32原创 2023-09-11 14:32:44 · 226 阅读 · 0 评论 -
神奇的交换术
在排序时候交换两个值的操作是必要的,怎么交换两个值呢?除了老老实实定义第三个变量,还是用一些奇思妙想呢?原创 2022-09-24 22:02:28 · 222 阅读 · 0 评论 -
函数指针详解
普通函数指针的定义方式为:return_type (*name)(arg1, arg2,...., agrn)函数指针赋值和调用时,函数名即为函数指针的地址。使用typedef可以简化函数指针的定义,例如:typedef int (*Fun)(int a, int b);使用typedef之后,可以直接使用别名定义函数指针变量。函数指针可以存储在数组中,实现对不同函数的调用。类成员函数指针的定义方式为:return_type (className::*pf)(arg list)类成员函数指针的调用原创 2022-09-17 18:17:07 · 962 阅读 · 0 评论 -
c++枚举字符串转换工具
在太多的工程中,我们可能都需要将一些枚举、整形标记打到日志中去,如果只打印数组,那也不行啊,出问题翻看日志,还得一个个查询,这时候我们该怎么办呢,写一堆ifelse,写一堆switch,挨个匹配字符,那只能说,小学生代码,能不能搞一个通用的转换呢?这里有个参数很有意思,fallback,他是什么意思呢,是退路,应变计划,说白了就是plantB的意思。stdlower_bound该函数是stdalgorithm里面的,含义大概就是将排好序的序列使用二分查找,返回第一个不小于目标元素的迭代器。.........原创 2022-07-20 00:16:19 · 1168 阅读 · 0 评论 -
主线程任务队列
平时用惯了qt,也知道qt只能在主线程中更新ui界面,ui中的各种按钮,输入也是在主线程中运行的。但如今生不逢时,所写项目竟要在嵌入式中运行,嵌入式内存本来就小,也没有界面,不可能给我搞个qt demo吧,只能使用命令行了,也没想太多,直接就撸起了代码,在子线程的回调函数中使用std::cin、cout 进行交互。由于是多线程环境,cout输出直接变了型,几乎是乱序输出,这是由于多线程抢占执行所致,也不难搞,直接写个WriteLog()函数,使用互斥锁保护起来,就如下面那样。机智如我,乱序输出也就这样搞好原创 2022-07-04 23:17:35 · 564 阅读 · 0 评论 -
浅谈c++中继承体系中易错点
浅谈c++中继承体系中易错点目前,就我工作经验来看,在c++中继承最爱写错或者写忘记的有两点:基类中需要覆盖的方法为设置为虚方法。基类中的析构函数未设置为虚方法。今天我们就基于这两点,展开讨论下,以免以后的工作中老爱犯错误。如果基类中需要覆盖的方法没有设置为虚方法会怎么样呢,后果就是继承了该类的子类,子类想要覆盖父类的方法,是不会成功的,在发生动态绑定的时候,依旧是调用父类的方法,并未调用子类的方法。我们直接以代码的方式来验证。...原创 2021-09-25 11:37:36 · 391 阅读 · 0 评论 -
c++位运算运用之掩码(BitMask)
c++位运算运用之位掩码(BitMask)场景:假如我想写一个动画小人,某个接口仅仅传int型就可以同时控制小人抬右手、抬左脚、闭眼睛,或者同时抬右手,抬左脚、睁眼睛。这儿其实就是一些动作的组合,可以把不同动作对应到int的每一个位上,int 占4个字节,每个字节8位,共32位,每一个位来表示一种动作,那么可以同时组合32个动作。内存分布就像这样:11111111 11111111 11111111 11111111这样一个int 的值就是INT_MAX实现:1.定义枚举表示各种动作:enum原创 2021-08-21 09:58:21 · 3277 阅读 · 1 评论 -
c++类型转换(static_cast、const_cast 、dynamic_cast、reinterpret_cast)使用方法
隐式类型转换:编译器自动进行的类型转换,例如将整数赋值给浮点数,或者将派生类指针赋值给基类指针。显式类型转换(强制类型转换):const_cast:用于去除csonst属性,可以将const对象转换为非const对象。dynamic_cast:用于在继承关系中进行安全的向下转型,即派生类对象指针转换为基类对象指针。static_cast:用于基本类型之间的转换,以及一些合理的指针和引用之间的转换。reinterpret_cast:用于不相关类型之间的转换,通常用于指针和整数之间进行转换。原创 2021-06-22 21:16:20 · 471 阅读 · 2 评论