标准布局和继承

Standard layout and inheritance

本文关键字:继承 布局 标准      更新时间:2023-10-16

第二个类不是标准布局的原因是什么?(Visual Studio c++)

#include <iostream>
#include <type_traits>
struct A
{
    int i;
};
struct B : public A
{
};
std::cout << "is_standard_layout<B> == "
          << std::boolalpha
          << std::is_standard_layout<B>::value // gives false
          << std::endl;

根据这个MSVC支持内置类型特征从版本8,但这似乎说你需要版本11。

第9.7节将标准布局类定义为:

  • 没有非标准布局类(或此类类型的数组)或引用类型的非静态数据成员,
  • 没有虚函数(10.3)和虚基类(10.1),
  • 对所有非静态数据成员具有相同的访问控制(条款11),
  • 没有非标准布局基类,
  • 在大多数派生类中没有非静态数据成员,并且最多有一个具有非静态数据成员的基类,或者没有具有非静态数据成员的基类,并且
  • 没有与第一个非静态数据成员相同类型的基类。