标准布局和继承

时间:2011-08-18 14:20:10

标签: c++ c++11

第二类不是标准布局的原因是什么? (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;

1 个答案:

答案 0 :(得分:2)

Accorting to this MSVC支持自版本8以来的内置类型特征,但this似乎表示您需要版本11.

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

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

some explanation here