自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

默然前行

大悲——而后生活——胜于跟那些小哀小愁整日讨价还价

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

站在巨人肩上的思考[连载] (8)

  5.2 数组 5.2.2 字符串文字量          类似”this is a string.”这样一个字符串文字量,它是一个常量。正如代码中一个显式的数字0xff08一样,其值不可以被更改。如想修改,可以通过复制给一个变量来实现:          <v:shapetype id="_x0000_t202" path="m,l,21600r21600,l21600,xe" o:sp...

2007-12-03 14:58:01 192

站在巨人肩上的思考[连载] (7)

  4.8 枚举          枚举是表示具有共同属性的整型常量集合的用户自定义类型。这其中包含这些含义: 1.         枚举的取值只能是整数,正负皆可; 2.         枚举的取值是常量,枚举初始化后,这些值不能被改变; 3.         枚举也是一种用户自定义类型,用户定义好枚举后,可以自定义该枚举类型自身的操作,如“++”,“<<”等; <o:p&gt...

2007-12-03 14:56:08 149

一种“标准”的虚函数机制简介

    编译器是如何针对虚函数产生可以再运行时刻确定被调用函数的代码呢?也就是说,虚函数实际上是如何被编译器处理的呢?Lippman在深度探索C++对象模型中的不同章节讲到了几种方式,这里把“标准的”方式简单介绍一下。     我所说的“标准”方式,也就是所谓的“VTABLE”机制。编译器发现一个类中有被声明为virtual的函数,就会为其搞一个虚函数表,也就是VTABLE。VTABLE实际上是...

2007-11-09 11:07:00 89

“界面”使用的情况

现有一基础模块A,提供模块间通信服务。类B、C中都有一个私有A*成员用于与其他模块之间通信,B、C的构造函数要求提供一个A的指针来初始化该私有成员。使用B的开发人员在平台W1上开发程序P1,具有A的A1实现版本;使用C的开发人员在平台W2上开发程序P2,具有A的A2实现版本;P1,P2进行通信。现在来看看A的界面如何使用: 对于A的设计者,给出A的界面接口规范A.h向所有驱动厂商、用户提供;并且...

2007-10-11 15:46:37 118

shell 快速变量处理

  Bash Shell可以进行变量的条件替换,既只有某种条件发生时才进行替换,替换 条件放在{}中. (1) ${value:-word} 当变量未定义或者值为空时,返回值为word的内容,否则返回变量的值. (2) ${value:=word} 与前者类似,只是若变量未定义或者值为空时,在返回word的值的同时将 word赋值给value (3) ${value:?message} 若变量以赋...

2007-09-14 11:10:06 382

A Generic Ostream Iterator

by Christopher Diggins November 11, 2005     Summary     Ostream iterators are a handy but under-utilized tool for using the STL to output containers and ranges. Here I provide an alternative, which ...

2007-09-07 08:37:30 101

我能从构造函数调用虚函数吗?

可以。不过你得悠着点。当你这样做时,也许你自己都不知道自己在干什么!在构造函数中,虚拟机制尚未发生作用,因为此时overriding尚未发生。万丈高楼平地起,总得先打地基吧?对象的建立也是这样——先把基类构造完毕,然后在此基础上构造派生类。   看看这个例子: #include<string> #include<iostream> using namespace std;...

2007-09-06 11:18:36 176

为何我的构造函数不太对劲?

 类似这样的问题千奇百怪。例如: 为什么我明明不想复制对象,而编译器却偏偏这么做了呢? 如何关闭复制机制? 如何防止隐式转换? 为何 int 自动转换成了复数?     类的默认复制构造函数和赋值运算符可以复制所有元素。例如:         struct Point {           ...

2007-09-06 10:57:38 64

如何在类中定义常量?

如果你想得到一个可用于常量表达式中的常量,例如数组大小的定义,那么你有两种选择: class X { static const int c1 = 7; enum { c2 = 19 }; char v1[c1]; char v2[c2]; // ... }; 一眼望去,c1的定义似乎更加直截了当,但别忘了只有static const的整型或枚举型量才能如此初始化。这就很有局限性,例如...

2007-09-06 10:51:58 516

为何空类的大小不是零?

为了确保两个不同对象的地址不同,必须如此。也正因为如此,new返回的指针总是指向不同的单个对象。我们还是来看代码吧: class Empty { }; void f() { Empty a, b; if (&a == &b) cout << "impossible: report error to compiler supplier"; Empty* p1 = ...

2007-09-06 10:46:13 114

我应该怎样处理内存泄漏?

很 简单,只要写“不漏”的代码就完事了啊。显然,如果你的代码到处是new、delete、指针运算,那你想让它“不漏”都难。不管你有多么小心谨慎,君为 人,非神也,错误在所难免。最终你会被自己越来越复杂的代码逼疯的——你将投身于与内存泄漏的奋斗之中,对bug们不离不弃,直至山峰没有棱角,地球不再 转动。而能让你避免这样困境的技巧也不复杂:你只要倚重隐含在幕后的分配机制——构造和析构,让C++的强大的...

2007-09-06 10:43:39 113

您可以推荐一种编写代码的标准吗?

   C++ 代码编写标准的要点是:根据使用 C++ 的具体的环境和具体目的制定一套规则。因此,没有哪一种代码编写标准是符合所有需要和所有用户的。对于一个特定的应用程序(或者公司、应用领域,等等)来 说,一种好的代码编写标准当然比没有标准要好得多。话说回来,我看到过很多例子表明一种差劲的代码编写标准比没有标准还要更糟糕。     选择规则时,请切记细心,而且你必须对该应用领域有过硬的知识。一些最...

2007-09-06 10:36:03 82

为什么编译要花这么长的时间?

    你的编译器可能有问题。也许它太老了,也许你安装它的时候出了错,也许你用的计算机已经是个古董。在诸如此类的问题上,我无法帮助你。      但是,这也是很可能的:你要编译的程序设计得非常糟糕,以至于编译器不得不检查数以百计的头文件和数万行代码。理论上来说,这是可以避免的。如果这是你购 买的库的设计问题,你对它无计可施(除了换一个更好的库),但你可以将你自己的代码组织得更好一些,以求得将修改代...

2007-09-05 17:21:14 588

为何标准容器效率如此低下?

不,它们的效率并不低下。或许“和什么比较?”会是一个更有用的回答。当人们抱怨标准库容器的性能时,通常会是以下三个现实问题之一: 复制开销 查表很慢 我写的(浸入式)链表比 std::list 要快得多     在优化之前,请先考虑是否真有性能问题。在我收到的大多数案例中,性能问题只是理论上的或者只存在于想象中:首...

2007-09-05 09:59:20 267

如何使用异常?

请参考 TC++PL 章节 8.3、第十四章,以及附录 E。附录聚焦于如何为“苛刻的”应用程序编写异常安全(exception-safe)的代码,它并非写给初学者看的。     C++ 里,异常用于发出一种信号,表示发生了“本地”处理不了的错误,比如构造函数里某个获取资源的操作失败了。例如:         class Vector {             int sz;       ...

2007-09-05 09:34:35 87

为何C++既有指针也有引用?

 C++ 的指针继承于 C,若要移除指针,势必造成严重的兼容性问题。引用有几方面的用处,但我在 C++ 中引入它的主要目的是为了支持运算符重载。例如:                 void f1(const complex* x, const complex* y) // 没有引用                 {                         complex z = ...

2007-09-05 09:28:28 684

可以在构造函数里抛出异常吗?析构函数里呢?

可以:当你不能正常地初始化(构造)对象时,你应该在构造函数里抛出异常。没有任何其它方法比抛出异常退出构造函数更合适了。 不然:你可以在析构函数里抛出异常,但这个异常必须不能越过析构函数;如果因为抛出异常而退出了析构函数,任何糟糕的情况都可能发生,因为这违反了标准库及 C++ 语言本身的基本规则。不要这么做。 更详细的实例和解释尽在 TC++PL 附录 E。 给你一个忠告:...

2007-09-05 09:24:19 352

C++ 描述字之const (1)

        const可能是C++最受欢迎的描述字了。他提供了更好的安全语义。很多企业在面试的时候经常抛出诸如“请谈谈const的用法”之类的题目。 const描述字允许我们提供一个语义约束:声称其被描述的对象具有“不该被改动”的性质,令人感到兴奋的是,编译器会强制实施这项约束。同时,他也允许告诉编译器和其他程序员,某些值应该保持不变。const多才多艺,在许多语境下可以用到他:变量、指针、对...

2007-09-04 07:09:00 121

站在巨人肩上的思考[连载] (6)

  第4章 类型和声明 4.3 字符类型        “由8bits表示的256个值可以解释为0~255,或者解释为-128~127,不幸的是,普通char类型选择那种解释是由具体实现决定的”[1]<o:p></o:p>        所以,不要做过多的假设。如果你必须这样做,请使用显式的signed char或者unsigned char来声明变量。 4.4整数类型 “...

2007-05-04 09:31:05 133

站在巨人肩上的思考[连载] (5)

      最近做个小项目,有点忙。事情倒是不难,就是有点杂,涉及到好多的东西,还得现找资料。这次又学习了远程数据库和rpc的编程,都挺有意思的,有时间和大家交流一下,不知道斑竹允不允许在本版讨论这些乱七八糟的东西,呵呵。 估计这周项目会结案,争取多多更新。:) 祝贺圈子朋友达到100人,希望我们这里越来越热闹! 本笔记首发www.iteye.com 转载请注明出处。谢谢。 //---------...

2007-04-23 19:40:10 85

站在巨人肩上的思考[连载] (4)

首先感谢  spinach 的鼓励与支持。你给了我很大的动力,真诚的希望我的文字能够对你有所帮助。  这篇之后可能周末前不会再更新了,因为手头上有个项目需要集中精力先搞定。 本笔记首发www.iteye.com 转载请您注明出处。谢谢。                                                                                 ...

2007-04-10 11:13:33 264

站在巨人肩上的思考 [连载] (3)

        上一篇中,主要是对C++类设计的一个概览。如果你认为那写得很肤浅,并能明确指出问题所在,那么恭喜你,可以说,你对C++的类机制有了更深入的了解!        这并不是说上篇笔记中有什么错误,前文仅仅就B.S.概述当中的某几句进行了适当的联想,但不能说全面、深入。其中提及的好多思想,方法只是针对C++类设计当中的类别:“具体类”的设计与实现。其他诸如层次结构的、多态的、范型的设计...

2007-04-09 08:36:26 115

原创 站在巨人肩上的思考 [连载] (2)

1.3 C++的设计tips: "If builders built buildings the way programmers wrote programs, then the first woodpecker that came along would detroy civilization."  -- Gerald Weinberg----------------------

2007-04-08 12:32:00 409

原创 站在巨人肩上的思考 [连载] (1)

[原创。欢迎复制。转载请您注明出处 -- Gavin]Tips: Correctness, simplicity, and clarity come first.序言:         2006年圣诞节这天,我终于买来了传说中的《The C++ Programming Language》这本Bjarne Stroustrup亲自撰写的著作。在此之前,也曾读过一些其它经典系列,但细细品读

2007-04-08 12:05:00 421

站在巨人肩上的思考 [连载] (2)

  <st1:chmetcnv tcsc="0" w:st="on" unitname="C" sourcevalue="1.3" numbertype="1" negative="False" hasspace="True">1.3 C</st1:chmetcnv>++的设计 tips: "If bu

2007-04-07 11:23:16 279

站在巨人肩上的思考 [连载] (1)

[原创。欢迎复制。转载请您注明出处 -- Gavin] Tips: Correctness, simplicity, and clarity come first. 序言:          2006年圣诞节这天,我终于买来了传说中的《The C++ Programming Language》这本Bjarne Stroustrup亲自撰写的著作。在此之前,也曾读过一些其它经典系列,但细细品读了该书...

2007-04-06 08:20:38 101

空空如也

空空如也

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

TA关注的人

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