龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > C/C++开发 >

Bjarne:为什么一个空类的大小不为0?

时间:2009-12-22 15:42来源:未知 作者:admin 点击:
分享到:
要清楚,两个不同的对象的地址也是不同的。基于同样的理由,new总是返回指向不同对象的指针。 看看: class Empty { }; void f() { Empty a, b; if (a == b) cout "impossible: report error to compiler suppl

  要清楚,两个不同的对象的地址也是不同的。基于同样的理由,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)。
  
精彩图集

赞助商链接