5.2 数组 5.2.2 字符串文字量          类似”this is a string.”这样一个字符串文字量,它是一个常量。正如代码中一个显式的数字0xff08一样,其值不可以被更改。如想修改,可以通过复制给一个变量来实现:          int a = 0 ...
  4.8 枚举          枚举是表示具有共同属性的整型常量集合的用户自定义类型。这其中包含这些含义: 1.         枚举的取值只能是整数,正负皆可; 2.         枚举的取值是常量,枚举初始化后,这些值不能被改变; 3.         ...
2007-11-09

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

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

A Generic Ostream Iterator

关键字: stream
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 has a more pleasing syntax. An ostream iterator, allows you to ...
可以。不过你得悠着点。当你这样做时,也许你自己都不知道自己在干什么!在构造函数中,虚拟机制尚未发生作用,因为此时overriding尚未发生。万丈高楼平地起,总得先打地基吧?对象的建立也是这样——先把基类构造完毕,然后在此基础上构造派生类。   看看这个例子: #include<string> #include<iostream> using namespace std; class B { public: B(const string& ss) { cout << "B constructor\ ...
2007-09-06

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

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

如何在类中定义常量?

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

为何空类的大小不是零?

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

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

关键字: bs voice
很 简单,只要写“不漏”的代码就完事了啊。显然,如果你的代码到处是new、delete、指针运算,那你想让它“不漏”都难。不管你有多么小心谨慎,君为 人,非神也,错误在所难免。最终你会被自己越来越复杂的代码逼疯的——你将投身于与内存泄漏的奋斗之中,对bug们不离不弃,直至山峰没有棱角,地球不再 转动。而能让你避免这样困境的技巧也不复杂:你只要倚重隐含在幕后的分配机制——构造和析构,让C++的强大的类系统来助你一臂之力就OK了。标准库中的 那些容器就是很好的实例。它们让你不必化费大量的时间精力也能轻松 ...
   C++ 代码编写标准的要点是:根据使用 C++ 的具体的环境和具体目的制定一套规则。因此,没有哪一种代码编写标准是符合所有需要和所有用户的。对于一个特定的应用程序(或者公司、应用领域,等等)来 说,一种好的代码编写标准当然比没有标准要好得多。话说回来,我看到过很多例子表明一种差劲的代码编写标准比没有标准还要更糟糕。     选择规则时,请切记细心,而且你必须对该应用领域有过硬的知识。一些最差劲的代码编写标准(“为了保护罪犯”,我不会提及这些 名字)的作者既没有过硬的 C++ 知识,而且对其应用领域也相 ...
2007-09-05

如何使用异常?

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

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

关键字: bs voice
 C++ 的指针继承于 C,若要移除指针,势必造成严重的兼容性问题。引用有几方面的用处,但我在 C++ 中引入它的主要目的是为了支持运算符重载。例如:                 void f1(const complex* x, const complex* y) // 没有引用            & ...
可以:当你不能正常地初始化(构造)对象时,你应该在构造函数里抛出异常。没有任何其它方法比抛出异常退出构造函数更合适了。 不然:你可以在析构函数里抛出异常,但这个异常必须不能越过析构函数;如果因为抛出异常而退出了析构函数,任何糟糕的情况都可能发生,因为这违反了标准库及 C++ 语言本身的基本规则。不要这么做。 更详细的实例和解释尽在 TC++PL 附录 E。 给你一个忠告:在某些“苛刻的”实时系统项目中,不该使用异常。例如,请参考 JSF 航空器 C++ 代码标准。 原文地址:http://www.research.att.c ...
2007-05-04

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

关键字: C++,BS,TC++PL
  第4章 类型和声明 4.3 字符类型        “由8bits表示的256个值可以解释为0~255,或者解释为-128~127,不幸的是,普通char类型选择那种解释是由具体实现决定的”[1]        所以,不要做过多的假设。如果你必须这样做,请使用显式的signed char或者unsigned char来声明变量。 4.4整数类型 “unsigned整数类型对于存储二进制bit数组的使用方式非常理想。 ...
2007-04-23

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

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

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

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

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

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

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

关键字: C++ TC++PL Bjarne Stroustrup
  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 --------------------------------    “一个设计良好的用户自定义类型与一个内部类型之间的差异仅仅在于其定义的方式,而不在其使用的方式&r ...
2007-04-06

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

关键字: C++ Bjarne Stroustrup TC++PL
[原创。欢迎复制。转载请您注明出处 -- Gavin] Tips: Correctness, simplicity, and clarity come first. 序言:          2006年圣诞节这天,我终于买来了传说中的《The C++ Programming Language》这本Bjarne Stroustrup亲自撰写的著作。在此之前,也曾读过一些其它经典系列,但细细品读了该书的第一、二章,掩卷之时仍不禁百感丛生。遂生写下本篇杂记的想法。也算对自己学习C++这门博大、优雅的语言的一次小结, ...
shi5jin
搜索本博客
最近加入圈子
存档
最新评论