- 博客(8)
- 资源 (21)
- 收藏
- 关注
原创 用const、enum、inline替代#define
在C语言程序设计中,define被大量地使用,用来定义常量或者宏,以减少代码重复及提高可维护性。但在C++中,引进了const、enum、inline后,大多数使用define的地方都可以用它们来代替(当然#ifndef、#define、#endif这种条件编译除外)。以下是几点提倡用const、enum、inline而不用define的理由: 1. 定义常量
2012-10-28 07:49:37 4041
原创 Lua函数的多个返回值
Lua中的函数的一个很特殊也很有用的性质,即可以有多个返回值。包括一些内置的函数就是这样。比如string.find函数,在给定的字符串中查找一个pattern,如果有匹配的部分,则返回对应的头、尾的两个索引值;如果不存在匹配,则返回nil。当然,用户定义的函数也可以有多个返回值,通过return关键字返回多个结果即可。比如一个返回数组中最大值及其索引的函数:function max(a) lo
2012-10-13 05:45:18 36964 2
原创 C++迭代器之'插入迭代器'
插入迭代器(Insert Iterator),又叫插入器(Inserter),是继上次的反向迭代器之后C++中的又一个迭代器适配器。插入迭代器的主要功能为把一个赋值操作转换为把相应的值插入容器的操作。插入迭代器对标准算法库而言尤其重要。算法库对所有在容器上的操作有个承诺:决不修改容器的大小(不插入、不删除)。有了插入迭代器,既使得算法库可以通过迭代器对容器插入新的元素,又不违反这一承诺,即保持了设
2012-10-11 23:00:10 8325
原创 C++迭代器之'反向迭代器'
反向迭代器(Reverse Iterator)是普通迭代器的适配器,通过重新定义自增和自减操作,以达到按反序遍历元素的目的。如果在标准算法库中用反向迭代器来代替普通的迭代器,那么运行结果与正常情况下相反。除此之外,其用法与普通迭代器完全一样,我们不作详细讨论。 这里主要讨论的是反向迭代器的一个很特殊、也很容易出错的性质,即它的“逻辑位置”与“物理位置”。先通过看一个例子开始:v
2012-10-11 20:00:00 6512
原创 C++中的函数对象(Function Object)(二)
除了自定义的函数对象,标准库还为我们提供了一系列现成的函数对象, 比如常见的数学、逻辑运算等。例如:negate(),plus(),minus(),multiplies(),divides(),modulus(),equal_to,greater(),less(),logical_not(),logical_and(),等等。 关于函数对象的最后一个很重要的概念是“函数适配器”。函
2012-10-10 04:27:59 7949
原创 C++中的函数对象(Function Object)(一)
一个函数对象,即一个重载了括号操作符“()”的对象。当用该对象调用此操作符时,其表现形式如同普通函数调用一般,因此取名叫函数对象。举个最简单的例子:class FuncObjType{public: void operator() () { cout<<"Hello C++!"<<endl; }};类FuncObjType中重载了“()”操作符,因此对于一个该类的对象FuncO
2012-10-09 08:24:32 39597 1
原创 C++中的异常安全性
一个函数如果说是“异常安全”的,必须同时满足以下两个条件:1.不泄漏任何资源;2.不允许破坏数据。 我们先通过两个反面的例子开始。 第一个是造成资源泄漏的例子。一个类Type,内含一个互斥锁成员 Mutex mutex,以及一个成员函数void Func()。假设Func函数的实现如下所示:void Type::Func(){ Lock(&mutex); DoSometh
2012-10-08 08:09:23 7673 3
原创 C++中的资源管理
C++中最重要, 也最令人头疼的事情之一就是资源管理。原则上,每次在堆区用关键字new申请一块内存,必须对应一个delete来释放它。对应一般的小程序,通过细心地写代码,很容易做到。但当程序变大、变复杂的时候,仅仅依靠谨慎的编写程序也是很难做到的。考虑以下几种情况:1. 用new申请资源与用delete释放资源之间的跨度比较大,很容易在做完中间一系列的任务后忘记最初曾申请过资源,导致未释放它。
2012-10-07 09:02:16 4197 2
D3D11法线映射示例
2013-03-11
D3D11 第一人称摄像机类的实现
2013-01-20
D3D11平面阴影实现
2013-01-16
D3D11(StencilBuffer)镜子的实现
2013-01-13
D3D11雾效示例程序
2013-01-10
D3D11纹理基础
2012-12-26
D3D11基本几何体绘制
2012-12-23
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人