Bjarne:为什么一个空类的大小不为0 |
|
www.nanhushi.com 佚名 不详 |
要清楚,两个不同的对象的地址也是不同的。基于同样的理由,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";
} | 有一条有趣的规则:一个空的基类并不一定有分隔字节。
struct X : Empty { int a; // ... };
void f(X* p) { void* p1 = p; void* p2 = &p->a; if (p1 == p2) cout << "nice: good optimizer"; } | 这种优化是允许的,可以被广泛使用。它允许程序员使用空类以表现一些简单的概念。现在有些编译器提供这种“空基类优化”(empty base class optimization)。
|
|
|
文章录入:杜斌 责任编辑:杜斌 |
|
上一篇文章: C++箴言:使接口易于正确使用难错误使用 下一篇文章: Bjarne:为什么编译要花这么长的时间 |
【字体:小 大】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 |
|
|