在C++中,继承本身(没有多态)是一个编译时功能.在编译的代码中,两者之间几乎没有差别
struct foo : bar {};
Run Code Online (Sandbox Code Playgroud)
和
struct foo { bar b; };
Run Code Online (Sandbox Code Playgroud)
除了访问其成员的偏移量之外,在编译的二进制文件中没有任何关于如何bar关联的"知识" foo.
但是,当您向图片添加多态(即virtual函数,允许dynamic_cast<>())时,这是不同的.它允许后期绑定:将在运行时决定调用哪个确切的函数.当然,这需要数据结构来执行此操作(通常使用所谓的虚拟表),并且在运行时访问这些数据结构以便确定调用哪个函数.
此外,virtual基类需要运行时支持才能使用派生对象访问它们.
如果您对某些C++特性的运行时成本感兴趣,可能需要尝试获取Stanley Lippman 的Inside the C++ Object Model的副本.这是一本旧书,但是如果你想知道虚拟成员函数是如何被普遍实现的,以及基本对象在多继承场景中如何在内存中进行布局,以及所有这些如何影响性能,那么你可以在这里找到彻底的讨论这些话题.
| 归档时间: |
|
| 查看次数: |
1434 次 |
| 最近记录: |