- C 语言 typedef 与 #define 比较
2025年09月06日
想象你有一个仓库(堆)里放着一箱子文件(字符串数据),箱子上有个地址牌(栈上的指针)。复制字符串就像搬家:
2025年09月06日
1.引言:
如果你接触过C#,你就会觉得C#中的delegate(委托)十分灵巧,它的用法上和C\C++的函数指针很像,但是却又比C\C++的函数指针更加灵活。并且委托可以一对多,也就是可以注册多个函数,甚至是某个类的非静态成员函数。而实现事件消息机制【1】也十分依赖于委托机制。基于这样的目的,我们试着在C++上封装出这样的一个委托机制。
【1】值得注意的是这里的委托事件模式与Windows的消息循环体系是不同的,通常Windows的消息是放到消息队列中,应用程序进程从队列中得到消息,然后调用消息处理过程来处理消息,这里是真正的消息通知,并且消息处理过程是有固定的函数声明的,不能更改成其他的格式,但是委托事件模式实际上就是一次函数调用,委托事件模式的使用,其好处是在开发中可以像真正的消息事件体系一样来理解整个体系模式,可以做到很好的接口分离。
2025年09月06日
C与C++两个关系亲密的编程语言,它们本质上是两中语言,只是C++语言设计时要求尽可能的兼容C语言特性,因此C语言中99%以上的功能都可以使用C++完成。本文探讨那些存在于C语言中的特性,但是在C++中缺失或者表现出不同行为的特性。了解这些特性能让你更深入地理解这两个语言,但是,本文中所罗列的每一项特性都不是建议你在程序开发中采用的技巧,而恰恰相反是应该避免使用的特性。为了你的代码可读性更好,移植性更强,请不要在你的代码中的任何地方秀出这样的特性。了解它是为了更好地避免她。
2025年09月06日
malloc 和 free是C语言中的库函数,在C++的应用中使用会产生问题,原因在于它们太简单:他们不知道构造函数和析构函数。
2025年09月06日
c++中移动语义std:move()定义:
template <class T>
typename remove_reference<T>::type&& move (T&& arg) noexcept {
return static_cast<remove_reference<decltype(arg)>::type&&>(arg);
}2025年09月06日
上文还是三天前写的,这两天连着两个晚上都在追踪一个Bug。程序运行、退出都正常,但是打开特定编译开关后,提示Warning: Thread Sanitizer: data race。程序员是不会容忍代码中有任何隐患存在的。说句题外话,写代码都会遇到Bug(Linux的发明者说过,没有人可以一下子就写出没有bug的代码,除了他自己)。估计没有多少人会喜欢Bug。其实我认为排除Bug是一件非常有趣的事,而且可以学到不少的东西,通常Bug都是来自于我们之前某个方面的错误认知,“唉,原来它是这样的,我一直以为是那样的”,不断地修正我们的认知,才能让我们高效地写出优秀的代码。
2025年09月06日
在C++中,常用的强制类型转换函数有:1. static_cast用于相似类型间的转换,可以进行上行转换(derived to base)、下行转换(base to derived)、基本类型之间的转换等。