Bjarne:为什么一个空类的大小不为0?
2008-03-08 21:35:08 来源:WEB开发网核心提示:要清楚,两个不同的对象的地址也是不同的,Bjarne:为什么一个空类的大小不为0?,基于同样的理由,new总是返回指向不同对象的指针,可以被广泛使用,它答应程序员使用空类以表现一些简单的概念, 看看:class Empty { };void f(){Empty a, b;if (&a == &b) cout <&
要清楚,两个不同的对象的地址也是不同的。基于同样的理由,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)。
更多精彩
赞助商链接