科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件Bjarne:为什么一个空类的大小不为0?

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

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

要清楚,两个不同的对象的地址也是不同的。基于同样的理由,new总是返回指向不同对象的指针。

作者:Molly编译 来源:天极网 2007年10月27日

关键字: Bjarne 空类 Linux

  • 评论
  • 分享微博
  • 分享邮件
 要清楚,两个不同的对象的地址也是不同的。基于同样的理由,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)。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章