自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(18)
  • 收藏
  • 关注

原创 C++技巧之编译告警

我这篇文章所说的编译告警是指GCC的告警。GCC是最为常见的跨平台编译器,我在工作中接触到的基本都是使用它。但GCC默认情况下,告警是关闭的。一般情况下,都会使用pc-lint来清零代码告警,以加强产品的质量。但pc-lint只能用于windows,并且是非常地难用。如果打开GCC的-Wall告警开关,我们也将是吃力不讨好。一堆的告警大都不是什么问题,只是没有严格符合GCC的编程规范罢了。在工作中

2009-08-02 11:46:00 1342

原创 性能设计

无论Java还是C++都有不少的性能优化工具。公司曾有人把一个系统从几十TPS优化到上千TPS,真是让人佩服到五体投地。但是由于架构的原因导致性 能问题,那就不好下手优化了。在软件项目设计前期,不可不能考虑性能设计。要确定好的性能要求,必须识别项目约束、确定软件将执行的服务并指定软件期望的 负载。但也不要过于注重性能设计。太注重往往会陷入设计的误区。有时甚至为了性能而牺牲功能,那是大错特错了。

2009-07-22 23:56:00 685

原创 C++技巧之名字空间namespace

C的开发人员会经常使用#define,即用宏来声明常量,但宏却是全局的,对大的工程很难维护,经常是导致名字冲突。还好,C++给我们带来了namespace名字空间。它的使用如下,名字空间可以把一组逻辑分组,同时名字空间也是一种作用域。namespace outspname{ const int CVAR1 = 1; const char* const CVAR2 = "3

2009-07-12 10:07:00 4744 1

原创 面向对象的设计原则

如何同时提高一个软件系统的可维护性和可复用性是面向对象的设计要解决的核心问题。 导致一个软件设计的可维护性较低,也就是说会随着性能要求的变化而“腐烂”的真正原因有四个:过于僵硬、过于脆弱、复用率低、黏度过高。 一个好的系统设计应该有如下的性质:可扩展性、灵活性、可插入性。这三条性质就是一个系统设计应当达到的目标。 软件的复用的好处有:第一,较高的生产效率;第二,较高的软件质

2009-07-02 21:35:00 605

原创 [C++] STL容器中erase方法的不同陷阱

STL中的容器都有erase方法,容器的存储分为顺序存储(如vector)与链式存储(如list,map)。先以map为例:typedef std::map TStrMap;typedef TStrMap::iterator TStrMapIter;TStrMap strmap;TStrMapIter iter = strmap.find("somekey");strmap

2009-07-01 21:39:00 2272 2

原创 C++的仿函数与动态语言的闭包

什么是闭包,我们先来用ruby看个例子:sum = 010.times{|n| sum += n} print sum 其中{}就是闭包的内容,代码看起来是不是很清爽与简单。我们还来看看Python写的闭包:def addx(x): return lambda y: x + yadd8 = addx(8)print add8(100)用Pyth

2009-06-29 21:26:00 1359 1

原创 C++技巧之std::string常用算法[2]

C++对于文本操作是非常痛苦,但有下面几个字符串的比较函数,会给你带来一点轻松。 11.icompare,不区别大小写比较,全都转化成小写,从str的第pos开始与另一个字符串从迭代器it2开始最多比较n个字符。template int icompare( const S& str, typename S::size_type pos, typename S::siz

2009-06-27 20:18:00 895

原创 C++技巧之std::string常用算法[1]

STL的string已给我提供一些常用的算法(find,substr,erase,replace等),但在实现应用中远远不能满足需求,像trim,toupper,tolower这样简单的算法都不提供,我曾偶发现一个开源的C++库中简洁优雅实现了这些算法。1.trimLefttemplate S trimLeft(const S& str) /// Returns a copy of

2009-06-27 20:05:00 825 1

原创 C++技巧之栈变量的析构应用

栈变量有一个好处,就是它退栈时会自动析构,并且在栈上对象生成比在堆上分配效率高很多。但每个线程的栈空间是有限的(创建线程时可以设置),所以一般的临时小对象都会在栈上分配。struct Test {};void test(){ Test stack_var; // a stack var; Test stack_var2; //a stack var; in

2009-06-25 21:42:00 1094

原创 C++技巧之operator操作符

这篇博文是以前很久写的,贴在我的早期一个blog中,今天google一下,发现还真有不少人转载,可惜并不注明出处。那时觉得operator比较好玩。C++有时它的确是个耐玩的东东。operator它有两种用法,一种是operator overloading(操作符重载),一种是operator casting(操作隐式转换)。1.operator overloadingC++可以通过operato

2009-06-24 21:29:00 28468 12

原创 [c++]自己实现的queue

周末在家,自己用C++练一下手,用顺序存储与链表存储实现了队列queue,queue是一种先进先出的结构,有很多的应用,比如消息队列。顺序存储实现: templateclass Queue{public: Queue() : m_front(0), m_rear(0) { } ~Queue() { } vo

2009-06-20 18:42:00 1405 1

原创 C++技巧之断言Assert

断言的应该是一种编程的常见技巧。我所应用的断言有两种,一种是动态断言,即大家所熟知的C标准库的assert()宏,一种是C++中的静态断言,即在编译期间检查。 1)动态断言:assert宏的原型定义在中,其作用是如果它的条件返回错误,则终止程序执行,原型定义:#include void assert( int expression ); assert的作用是先计算表达式 expre

2009-06-14 10:08:00 7568 2

原创 C++技巧之宏Macro应用

1.宏不要用来定义常量,因为宏变量是没有类型安全的,也没有名字空间约束,会造成名字的污染。  2.宏的展开是一行,所以宏中的注释不能使用//,只能使用/* */。宏的代码也不能gdb跟踪,宏中代码逻辑要尽量简单。  3.宏的参数一般情况下使用时要用()括起来,如#define MAX(a, b) a /2 > b ? a /2  : bMAX(3,4)使用没有问

2009-06-12 19:15:00 2549 2

原创 [c++]自己实现的stack

还是前一段时间需要任职资格考试,自己练习一下栈stack的简易实现,今天把它贴出来,暴露的接口与STL类似,没有实现iterator迭代器。实现有两种方式, 基于顺序存储与链式存储。栈的特点是“后进先出”,在数学表达式运算,编译语法分析中,程序函数调用时最为常见。 公用的宏与异常类#define NEW(var, T) do { / try {

2009-06-11 21:31:00 844

原创 用C++模板来展示new与delete操作符原理

C++中的new与delete可以认为是C中的malloc与free的升级版本。new包含两部分,一部分是与malloc功能相同,是从堆上面申请内存块,第二部是调用类的构造方法来初始化刚申请的内存。delete是new的逆过程,先调用类的析构方法来反初始化,再把刚申请的内存还给堆。new [] 与delete []是针对数组操作符,要注意是通过new []分配的对象,不能用delete

2009-06-07 18:27:00 3054 1

原创 [c++]常见的几个排序算法

前一段时间需要任职资格考试,于是又拿起丢了几年的数据结构书看了看,温习了一下常见的几个排序算法。今天特把我写的学习代码贴了出来。排序的算法常见有插入排序,选择排序与交换排序,较复杂一点还有归并排序与基数排序,概念性的东西我就不多说了,大家可以找一本严老师数据结构书看看。读大学时不觉得怎么样,现在再来看看,又结合这几年的编程经验,觉得写得还是蛮有水平的。 1.先来一个排序中的比较函数子,实现

2009-06-07 09:25:00 809

原创 Java中String

今天上班时,有同事问我:log.debug("log something")会不会每次写日志时,生产一个新的String对象,还要在其外围加上if(log.isDebugEnable())以提高性能?答案是不会。 写过C++的代码人其实很容易理解char* str = "log something"; "log something"在编译时会把它放在常量区,str只是指到该常量的一个指针。其实,J

2008-01-28 20:21:00 883

原创 JAIN SLEE

研究JAIN SLEE也有一段时间了,整体感觉这个规范发展很慢,没有什么社区。SLEE是IT企业想向电信设备企业渗入的,一个关于业务逻辑执行环境的规范。你可以把SLEE理解一个EJB2.X的规范,目前的版本为1.1。1.1还是一个未正式发布的草稿。1.1对1.0进行了大幅的修证,新增了很多东西,但离一个成熟的,完善的业务逻辑执行环境的规范很远。目前基于SLEE规范开发的产品,主要公司有mobice

2008-01-27 20:28:00 1890

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除