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 error to compiler supplier";
}
另外,C++中有一条有趣的规则——空基类并不需要另外一个字节来表示:
struct X : Empty {
int a;
// ...
};
void f(X* p)
{
void* p1 = p;
void* p2 = &p->a;
if (p1 == p2) cout << "nice: good optimizer";
}
如果上述代码中p1和p2相等,那么说明编译器作了优化。这样的优化是安全的,而且非常有用。它允许程序员用空类来表示非常简单的概念,而不需为此付出额外的(空间)代价。一些现代编译器提供了这种“空基类优化”功能。
发表评论
- 浏览: 9952 次
- 性别:

- 来自: 上海

- 详细资料
搜索本博客
最近加入圈子
最新评论
-
站在巨人肩上的思考[连载 ...
呵呵,我看的是Effective C++第三版,第一个item。 对,就是那四句 ...
-- by shi5jin -
站在巨人肩上的思考[连载 ...
欢迎讨论远程数据库和rpc的编程。 “《Effective C++》的开篇点题 ...
-- by bigpanda -
站在巨人肩上的思考 [连载 ...
读完这两节,我基本就一个字,“基本帅呆了”。
-- by spinach -
站在巨人肩上的思考 [连载 ...
终于等到了,慢慢看。
-- by spinach -
站在巨人肩上的思考 [连载 ...
期待下文
-- by spinach






评论排行榜