标准布局和继承
Standard layout and inheritance
第二个类不是标准布局的原因是什么?(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),
- 没有非标准布局基类,
- 在大多数派生类中没有非静态数据成员,并且最多有一个具有非静态数据成员的基类,或者没有具有非静态数据成员的基类,并且
- 没有与第一个非静态数据成员相同类型的基类。
相关文章:
- 继承函数的重载解析
- 继承期间显示未知行为的子类
- 头文件-继承c++
- 为什么在保护模式下继承升级不起作用
- 如何使用C/C++在MacOSX中获得键盘布局
- 通过继承类使用来自不同命名空间的运算符
- 子目录是否继承属性,例如add_definitions,include_directories和父Cmakelist.t
- C++继承的虚拟类的内存布局
- 打包类的内存布局 + 继承
- 是C 单继承的内存布局与此C代码相同
- c++中虚拟继承的对象布局
- 是否可以继承QVBoxLayout并将其设置为QWidget中的布局
- 多虚拟继承中的虚拟表和内存布局
- C++内存布局的继承
- C++ 带"Empty classes"的多重继承内存布局
- 在多重继承布局中单独重写虚拟方法
- 继承类的内存布局
- 标准布局和继承
- 编译器构造 - C++中多个继承对象的内存布局
- C++ POD 结构继承?是否有任何关于派生成员的内存布局的保证