小编ser*_*rsh的帖子

派生模板类和基类布局兼容吗?

我有两节课:

struct Base
{
    int a;
};

template<typename T>
struct Derived : Base
{};
Run Code Online (Sandbox Code Playgroud)

它们的布局兼容吗?

C++11 标准表示 ([class.mem]/16):

如果两个标准布局结构(第 9 条)类型具有相同数量的非静态数据成员,并且相应的非静态数据成员(按声明顺序)具有布局兼容的类型,则它们是布局兼容的。

但它也说([class.衍生] / 8):

基类子对象的布局 (3.7) 可能与同一类型的最派生对象的布局不同。

这让我很困惑。

笔记:

此项检查

static_assert(__is_layout_compatible(Base, Derived<int>), "");
Run Code Online (Sandbox Code Playgroud)

传递给 GodBolt(编译器 - x86-64 gcc(trunk))。

c++ standards inheritance

5
推荐指数
0
解决办法
88
查看次数

标签 统计

c++ ×1

inheritance ×1

standards ×1