需要重新编译派生类的基类更改
change in base class requiring recompilation of derived
in Bjarne的" c++…"我刚读到
大多数c++实现的工作方式意味着基类大小的改变需要重新编译所有派生类
美元12.4.3 p.318
的大小?或者说总体上的变化?
在典型情况下,更改大小需要重新编译所有派生类。其他更改也可能需要重新编译派生类(例如,更改成员的顺序和/或类型可能需要重新编译,即使大小保持不变)。
我认为Bjarne试图得到的是,从内存布局的角度来看,派生通常是作为聚合实现的。例如,如果您以这样的内容开头:
struct A {
int x;
int y;
};
struct B : A {
int a;
int b;
};
B b;
b
的内存布局如下:
| X | Y | a | b |
…因此,当/如果A
的大小发生变化时,B
的成员将在复合对象中以不同的偏移量存储。
对于典型的构建系统,对包含基类定义的头文件的任何更改都将导致重新编译所有派生类,无论更改是否需要重新编译(即,如果头文件的更改日期比依赖于它的源文件的更改日期更近,源文件将被重新编译,即使所有更改都是,例如,注释对代码根本没有影响)。
相关文章:
- 如何通过派生类函数更改基类中的向量
- 如何使用基类指针引用派生类成员
- 使用基类指针创建对象时,缺少派生类析构函数
- 如何引用基类的派生类?
- 如果基类包含双指针成员,则派生类的构造函数
- 为什么此派生对象无法访问基类的后递减方法?
- 使用基类中的派生方法运行线程,而无需使用模板
- 是否可以使用基类非虚拟方法中的派生类虚拟方法?
- C++重载函数,一个采用基类的参数,另一个采用派生类的参数
- 在派生类中使用基类的私有成员变量的最佳方法
- 基类和派生类的多态赋值运算符
- 如何在从抽象基派生的类中实现相同的方法?
- 基类的填充将被复制到派生类中
- 如何在不使用指针的情况下将派生类的对象作为参数传递给基类中的函数?
- 指向基类派生类的 std::unique_ptr 的指针
- 为什么基类数据在派生类数据之前初始化
- c++ 派生基类 Friend 函数访问父级上的私有函数
- 如何将基类替换为派生基类
- 当基类未指定构造函数时,如何使用仅具有带参数的构造函数的类派生基类?
- 解析公用派生基类模板中的函数模板名称时出错"Not declared in this scope"