其他分享
首页 > 其他分享> > c – 继承编译时间还是运行时间?

c – 继承编译时间还是运行时间?

作者:互联网

在c中,继承是在运行时还是编译时发生的?

例子?

解决方法:

在C中,继承本身(没有多态)是一个编译时功能.在编译的代码中,两者之间几乎没有差别

struct foo : bar {};

struct foo { bar b; };

除了访问其成员的偏移量之外,在编译的二进制文件中,bar不会有任何与“foo”相关的“知识”.

但是,当您向图片添加多态(即虚函数,允许dynamic_cast<>())时,这是不同的.它允许后期绑定:将在运行时决定调用哪个确切的函数.当然,这需要数据结构来执行此操作(通常使用所谓的虚拟表),并且在运行时访问这些数据结构以便确定调用哪个函数.

此外,虚拟基类需要运行时支持才能使用派生对象访问它们.

如果您对某些C功能的运行时成本感兴趣,您可能希望尝试获取Stanley Lippman的Inside the C++ Object Model副本.这是一本旧书,但是如果你想知道虚拟成员函数是如何被普遍实现的,以及基本对象在多继承场景中如何通常在内存中布局,以及所有这些如何影响性能,那么你可以在这里找到彻底的讨论这些话题.

标签:c,compile-time,inheritance,runtime
来源: https://codeday.me/bug/20190726/1540400.html