- 博客(34)
- 收藏
- 关注
原创 blog移植到http://zadecn.spaces.live.com
blog移植到http://zadecn.spaces.live.com
2010-02-08 17:16:00
2572
原创 boost::weak_ptr和enable_shared_from_this
v/:* {behavior:url(#default#VML);}o/:* {behavior:url(#default#VML);}w/:* {behavior:url(#default#VML);}.shape {behavior:url(#default#VML);} 1280x1024 Normal 0
2008-07-16 14:34:00
8907
原创 covariant return type and boost::shared_ptr
covariant return type and boost::shared_ptr covariant return type翻译为协变返回值,意义就是在虚函数的返回值上,可以使用子类对象,而不必是基类对象.下面是一个例子:struct Object { public: virtual ~Object()
2008-03-06 14:53:00
3834
原创 Architecture & Framework
Architecture不是软件,是关于软件如何设计的重要决策Architecture不关心所有的决策,而只是关心其中的重要决策:即关系各个部分(模块)的静态关系(功能划分)和动态关系(模块交互)Architecture所要求的原则和决策会体现在Framework当中 Framework不是一个运行系统,而是系统所依赖的一个编码约束(基类和子类)和算法实现(函数调用)的集合Frame
2008-02-22 14:41:00
2964
原创 C++ enum类型的一个更好的用法
C++ enum类型的一个更好的用法 enum 类型是c++的一个基本的类型,用于声明可以枚举的常量.相对于C#的enum, c++的enum有几个缺陷:1 不支持组合特性,也即FlagsAttribute属性;2 不支持toString方法,转换为字符串需要特别的函数实现;3 不支持命名空间的特性.前面的两个比较明显
2008-02-22 14:39:00
19442
6
转载 static_cast、dynamic_cast、reinterpret_cast、和const_cast
关于强制类型转换的问题,很多书都讨论过,写的最详细的是C++ 之父的《C++ 的设计和演化》。最好的解决方法就是不要使用C风格的强制类型转换,而是使用标准C++的类型转换符:static_cast, dynamic_cast。标准C++中有四个类型转换符:static_cast、dynamic_cast、reinterpret_cast、和const_cast。下面对它们一一进行介绍。static
2007-07-04 13:20:00
2920
原创 c++引用的弊端-引用不如指针
c++中引入引用的概念是为了操作符重载(见c++的设计与演化),scott meyers在其相关的Effective c++中也对引用和指针有过论述.在我刚刚接触引用的概念以后,我认为这是一个极好的东西,在函数参数和成员变量中大量的使用他,但是很快我就发现引用不如指针了.除了操作符重载引用是必须的以外,引用的一个其他的好处是对于函数参数传递来说,一般不用检查引用是否是空(确实能够把引用指向一个空对
2007-06-14 11:00:00
3579
原创 中国计算机水平低是因为工程水平差
前几天在计算所听工程中心主任的报告,主任的一句话给我的印象非常的申:中国计算机水平差,在很大的程度上不是计算机的理论水平比较低,而是计算机的工程水平比较差。换个说法,就是说中国的计算机理论知识还不错,但是计算机的技术水平比较低。也就是说,中国很难生产高质量的计算机软硬件。 我自己也很有这方面的感觉。现在计算机本身的理论已经相对比较成熟了,但是在目前的水平
2006-09-07 21:40:00
3446
原创 翻译的艺术-bind
翻译的艺术-bind 裘宗燕老师对bind的论述(http://www.is.pku.edu.cn/%7Eqzy/books/cppl/words.htm):bind:目前的主要译法有“约束”和“绑定”(还有译为“联编”,这个译法太局限,在许多地方根本无法使用)。这两个译法大约都是从80年代初开始使用。前者由北京大学吴允曾、马希文等先生倡导,后者好像出自科学院计算所。前者取意义,后者希
2006-03-04 23:43:00
3247
原创 翻译的艺术-public/private
翻译的艺术-public/private 计算机技术词汇的翻译并不太难,但是要翻译的很好就不是很容易了。前人有过标准,“信、达、雅”。对于计算机技术词汇,我的理解是:“信”就是要准确,“达”就是要尽量把作者的原意表达全面,“雅”就是高雅,也就是说翻译的要有美感。简单的说,翻译的标准是要准确、有美感。前一个标准相对的客观,后一个标准比较的主观,不过对这个主观的标准仍然有迹可寻。我们看
2006-02-28 18:58:00
3301
原创 实施软件开流程控制的前提
软件开发的规模进入到一定的程度的时候, 需要软件开发流程来保证软件开发的可控性. CMM, RUP, ISO9001, 这些都是耳熟能详的流程控制方法, 但是能够成功应用这些方法的软件企业和单位并不是很多; 而且, 很多的软件企业和公司并没有采用这些流程方法, 但是仍然取得了很好开发的软件产品(例如微软, 他使用了别的方法). 我觉得这有两个方面的结论: 1 软件开发流程的采用是无需置疑的;
2006-02-19 15:51:00
3188
原创 Prefactor
Prefactor (http://www.artima.com/weblogs/viewpost.jsp?thread=147332)老美真是会制造概念(不过我想这仍然不同于国内有些人, 只有概念而没有概念背后的东西, 说的俗一点, 总是给你玩虚的), refactor就是一个创造的单词, 通过Martin Flower相信大家已经相当的熟悉了, 国内翻译为重构. 这次又在artima上面看
2006-02-17 16:57:00
4271
原创 类成员变量的命名
在类的成员函数当中,可能需要访问两种类型的变量, 局部变量和成员变量, 例如:class MyClass{ private int m_var; //成员变量命名方式1 private int _var1; //成员变量命名方式2 private int var2_; //成员变量命名方式3 void someFunc (int var){ int local = 10; if(local
2006-02-16 10:49:00
7403
原创 编程语言的终极梦想
相对于C语言, C++语言更加灵活, 因为它是一种OOP的语言. C#更加灵活, 因为它还支持垃圾回收, 定制属性, 匿名方法. Ruby语言是一种动态语言, 它比C#更加的灵活. 每一种语言都有自己的特点, 这也是它们如今仍然继续存在的原因. 微软在.Net体系下面定义了IL中间语言, 从而把各种使用.Net兼容的语言编写的代码之间可以相互的调用. 对于程序员来说
2006-02-13 17:43:00
3267
原创 ADO.NET数据库访问的一个缺陷和补救思路
ADO.NET数据库访问的一个缺陷和补救思路在C#中,访问数据库的典型方法是:// connect to my local server, northwind db string connectionString = "server=(local)//NetSDK;" + "Trusted_Connection=yes; database=no
2006-02-12 14:11:00
3044
原创 IEnumerator and IEnumerable
C# defines two interfaces to enumerate a collective object. Now let us see them:public interface IEnumerator{ object Current { get; } bool MoveNext(); void Reset();}public interface IE
2006-01-14 13:32:00
3366
原创 C#的资源回收
C#的GC机制,使得在C#中内存自动管理,在一定的程度上,这省去了程序员的很多麻烦,这可以看成是一个很大的进步。在C++中,有一条很重要的原则,即资源的获取就是初始化(“resource acquisition is initialization”),也即是在构造函数中获取资源,在析构函数中释放资源。由于对象的构造函数和析构函数发生在特定的时刻,并且析构函数的调用是自动并且强加的,所以一般这可
2006-01-06 10:46:00
4988
原创 C#语言和类库
就象微软一贯的风格,C#语言非常的方便。当你想快速的构造一个应用程序的时候,C#语言的效率非常的高。很显然,微软的类库和默认的处理机制在发挥着作用。作为一个程序员,你可以不用关系这些;因为在大多数的情况下,微软的这些默认的处理机制正好是你所需要的。作为一个C++语言的爱好者和使用者,我更加关心的是,那些是语言本身的定义,那些是类库和默认的处理机制。当我第一次好奇的考察C#语言的委托机制的时候,下面
2006-01-04 15:46:00
3546
原创 C#中的语句块内的不变性
C#语言规范规定,对于表达式中一个简单命名的标识符,在同一个即刻闭合控制块内或者switch块内(the immediately enclosing block or switch-block)的语义是恒定不变的。这条规则确保了在一个表达式的上下文的环境中,同一个名字在一个控制块内拥有相同的含义。否则会引发编译错误,如下:class Test{double x;void F(bool b) {
2005-12-31 15:56:00
1222
原创 浪漫和回车
我记得在大学上英语课的时候,我们的老师是一位漂亮的女老师。在一篇英文课的教学中,我们遇到了英文单词“romantic”,这位漂亮的女老师对这个词被翻译为“浪漫”大发感慨,认为这个翻译惟妙惟肖,美轮美奂,简直是妙不可言。多年以来我对老师的这个感慨记忆犹新,深表赞同。我还猜想,说不定当时我们的这个漂亮的女老师正经历着romantic的爱情呢。回车是计算机编程经常遇到的一个词汇,编程的时候标示为‘/r
2005-12-30 16:21:00
1074
1
原创 正反馈算法
正反馈算法 我最近设计了一个这样的算法:有一个算法的总体框架,抽象了共同的部分;把各个差异的部分放在具体的类里面实现。具体的子类要实现好多的特殊情况,有的情况很罕见,有的情况很常见;但是为了正确,必须涵盖所有的情况。具体的代码类似下面:templateclass ConcreteClass>bool wholeAlgo(ConcreteClass& cc){ init(); while(cc
2005-12-26 22:32:00
2068
原创 迭代的概念
Christopher Diggins在他的blog文章introducing the Iterable Concept中提到了迭代的概念,且看他的定义的实例:In pseudo-C++ this translates to roughly: concept Iterable { public { typedef value_type; templatetypename Proce
2005-12-15 21:06:00
1514
原创 维护你的测试代码
维护你的测试代码Christopher Diggins在artima自己的blog中有两片文章:Post TDD和QA and TDD,都是关于TDD的,核心的意思是在满足要求的情况下,测试代码应该尽量的减少。一般我的经验是,release的库代码应该尽量的精简高效,测试代码应该尽可能的多而全。作者的意思是要减少测试代码的数量,似乎有点矛盾。测试代码一般是白盒测试,从路径覆盖角度说,只要覆盖了全部
2005-12-14 11:18:00
938
原创 TDD规则
Michael Feathers在Artima自己的Blog中2005-9-9发表了一篇A Set of Unit Testing Rules的文章,提出了如下的代码不是单元测试:1. 访问数据库It talks to the database2. 访问网络It communicates across the network3. 访问文件系统It touc
2005-12-14 11:00:00
1029
原创 Bjarne Stroustrup大师谈
artima网站对在Bjarne Stroustrup在2003进行了专访,摘录了一些有感触的内容。1. 有责任维护类的不变性的函数应该成为类的接口The functions that are taking any responsibility for maintaining the invariant should be in the class 2. 如果一个类的成
2005-12-14 10:40:00
1196
原创 对象的完整性
对象的完整性 对象是OOP的基本单元,由于维护一个对象需要很大的代价,所以设计一个对象也需要谨慎。按照中国教科书的习惯,一般要把这个问题分解为对象的合理性、正确性和完整性。在这里我不想把人搞糊涂也不想把我搞糊涂,我只是提对象的完整性。当然也借鉴了牛人布鲁克斯的术语,他在《人月神话》里对系统概念的完整性推崇倍至。对象的完整性,从正面的角度来说,就是指对象的函数接口是完备的;从反面的角度来说,就是不
2005-12-14 10:25:00
1262
转载 在 Microsoft Visual Studio Team System 和 Microsoft Visual SourceSafe 之间选择
在 Microsoft Visual Studio Team System 和 Microsoft Visual SourceSafe 之间选择发布日期: 11/18/2005 | 更新日期: 11/18/2005Microsoft Corporation适用于:Microsoft Visual Studio 2005 Team Foundation ServerMicrosoft Visual
2005-12-12 20:10:00
949
转载 Windows Data Alignment on IPF, x86, and x86-64
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dv_vstechart/html/vcconwindowsdataalignmentonipfx86x86-64.asp?frame=trueWindows Data Alignment on IPF, x86, and x86-64Kang Su GatlinMic
2005-12-11 15:00:00
1507
转载 编写更快的托管代码
编写更快的托管代码:了解开销情况Jan GrayMicrosoft CLR Performance Team2003 年 6 月适用于: Microsoft® .NET Framework摘要:本文介绍托管代码执行时间的低级操作开销模型,该模型是通过测量操作时间得到的,开发人员可以据此做出更好的编码决策并编写更快的代码。 下载 CLR Profiler。(330KB)目录简介(和誓言)关于托管
2005-12-07 11:32:00
1733
原创 需求分析不畅更多的是程序员的责任
作为一个程序员,当你和用户沟通作需求分析的时候,由于沟通不畅你的不愉快心情有多大?平息你的心情,继续向下看可能给你带来好的心情。听一听下面一些人的感觉:他们来自于另一个世界(这是比较客气的说法);那些提需求的家伙根本不懂怎么说话(这个说法稍为激烈一些);那是一些不知道自己要什么的蠢货(你遇到过这样的用户吗?)。怎么样?作为程序员的你是否大呼过瘾,但是作为沟通的用户可能要骂娘了。 中国有
2005-12-07 10:48:00
1483
原创 模板特化,全特化,偏特化,全部特化,部分特化的含义
这几个名词真是把人搞混了(是因为有的著作,甚至名著以讹传讹),我最近整理了以下,看看大家的意见如何。模板特化:任何针对模板参数进一步进行条件限制设计的特化版本。《泛型思维》全特化就是全部特化,即针对所有的模板参数进行特化。《c++ primer》偏特化就是部分特化,即针对部分模板参数进行特化。《c++ primer》全特化和偏特化的定义不是很严格,所以有的时候不容易让人理解。举例如下:templa
2005-12-06 11:50:00
6553
6
原创 关于set元素的不可直接更改
set的元素类型和比较函数(或者函数对象)是可以配置的,但是一旦配置就不能更改。set的元素类型不可更改是很自然的,这本就是模板的天然含义。set的比较函数虽然可以得到,但是得到的是copy,不是引用或者指针,所以不能修改(修改比较函数对象的参数)。set里面的元素不能直接的更改,一般的做法是先删除旧元素,然后添加新元素,这当然是为了维护里面元素的有序性。单独的修改set的比较函数和元素数值,都有
2005-12-06 11:45:00
3789
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人