编译时多态性和静态绑定有什么区别?

2024-01-31

This https://stackoverflow.com/questions/10580/what-is-early-and-late-binding链接帮助我理解静态绑定和动态绑定之间的区别?但我很困惑

静态绑定和编译时多态性有什么区别或者没有区别.

这也产生了一个关于动态绑定和运行时多态性的疑问?


In short

静态绑定与动态绑定是关于when要运行的确切代码(即函数的地址)是已知的:在编译时、链接时(均为“静态”)、加载时或运行时(均为“动态”)。

多态性首先是关于how要运行的确切代码是已知的:为了符合多态性,它必须从type正在处理的数据。当数据的“动态类型”直到运行时才知道(通常是因为类型由运行时数据输入确定)时,必须使用动态绑定,这需要动态多态性(也称为运行时多态性;C++ 提供虚拟调度)此类机制)。在其他情况下,即使正在处理的数据类型在编译时可用,虚拟调度也是有用的 - 特别是在代码更改后最小化/消除(重新)编译时间以及调整代码“膨胀”时。无论如何,编译时又名静态多态性使用编译时已知的类型来在编译或链接时绑定(即“静态”)。

Examples

struct Base { virtual void f(); void g(); };
struct Derived : Base { void f(); void g(); };

Derived d;
d.f();    // if definition's in a shared library, needs dynamic binding
          // otherwise (same translation unit, linked object, static lib)
          // compiler should optimise to static binding
          // (though functionally either would work)

Base* p = factory(data);
p->f();   // dynamic binding - if p points to a Base, use Base::f()
          //                 - if p pointer to a Derived, use Derived::f()

void some_func(const char*);  // note: no polymorphism / overloads

some_func("hello world\n");
       // if some_func is defined in...
       //  - shared / dynamic link library, binds dynamically
       //  - otherwise, static binding

std::cout << "hello world\n";  // static binding
                               // compile-time polymorphism from (operator) overloading

讨论

binding通常是指程序将函数调用解析为特定函数实现的机器代码的时间:

  • static

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

编译时多态性和静态绑定有什么区别? 的相关文章

随机推荐

  • 如何将消息附加到 RSpec 检查?

    在 RSpec 中 我可以像在 xUnit 样式测试框架中那样将消息附加到检查吗 如何 assert equal value1 value2 something is wrong 对于 RSpec 3 该消息可以自定义为字符串或使用过程 检
  • 从 Cocoa 应用程序执行终端命令

    如何执行终端命令 例如grep 来自我的 Objective C Cocoa 应用程序 您可以使用NSTask http developer apple com documentation Cocoa Reference Foundatio
  • FBSDKCoreKit.framework/FBSDKCoreKit:通用包装器中没有匹配的架构

    我正在尝试将核心 Facebook SDK 设置到我的项目中 我的项目是基于 Swift 的 但 SDK 是 ObjectiveC 我复制了两个Bolts framework and FBSDKCoreKit Framework进入我的项目
  • 在 MongoDB 中将 Guid 存储为字符串有哪些缺点?

    应用程序将 Guid 字段保留在 Mongo 中 最终存储为 BinData id new BinData 3 WBAc3FDBDU Zh cBQFPc3Q 这种情况下的优点是紧凑 缺点在需要对应用程序进行故障排除时就会显现出来 Guid
  • 将一些布尔属性转换为标志枚举

    我需要将具有 3 个 bool 属性的遗留类转换为标志枚举 我知道这些属性中至少有一项是正确的 Flags public enum FlagEnum EnumValue1 1 EnumValue2 2 EnumValue3 4 public
  • 指定 Rust 闭包的生命周期

    我在制作执行器 反应器时发现这是一个终身问题 它与 async Future 无关 并且可以在没有异步糖的情况下重现 use std future Future struct Runtime fn start with runtime
  • Reactjs追加一个元素而不是替换

    我正在尝试迭代事物的列表 数组 对象 我使用咖啡脚本来保持清晰 完整的 JS jsfiddle 在这里 http jsfiddle net AMxfL 但这只是一个 forEach pages for page each of props
  • 在CMake中自动使用目录作为项目名称

    我在使用 CMake 来管理我的构建系统方面还很陌生 所以如果我很愚蠢并且这是一个坏主意 请告诉我 我希望能够设置我的 cmakelists txt 文件 以便当我这样做时 project 目录名称自动成为项目名称 我想这样做是因为我发现能
  • 使用paintComponent在JFrame中镜像对象

    我创建了一个类 它是一个 镜像 对象 类构造函数具有镜像坐标和方向 这个类中还有一个paintComponent方法 我正在尝试在框架中使用此类创建一个镜子对象 并自动绘制带有坐标和方向的镜子 有 镜子 类 我可以这样做吗 import j
  • 使用 pyvmomi 获取 vmware 中实例实际使用(分配)的磁盘空间

    我最近开始使用 pyvmomi 在将实例迁移到 AWS 之前获取 vmware 服务器的详细清单 在vcenter Web界面或vsphere客户端中 我可以检查实例并查看其磁盘 它会告诉我磁盘大小 已配置 以及正在使用的磁盘量 已用存储
  • JavaScript 字节序编码?

    对SO的回应 https stackoverflow com questions 503052 javascript is ip in one of these subnets 503238 503238我开始思考 JavaScript 是
  • 计算词性标注器准确率的参数

    我是自然语言处理的初学者 我有一个关于计算 POS 标注器准确性的基本问题 标注器正在使用语料库 不要将下面的 集合 一词与集合的数学定义混淆 我只是将其用作普通的英语单词来传达一些 组 或 映射 有不同的准确性指标 例如精度 召回率和混淆
  • C/C++ 中本地时间和 GMT/UTC 之间的转换

    在 C C 中在本地时间和 UTC 之间转换日期时间的最佳方法是什么 我所说的 日期时间 是指包含日期和时间的时间表示形式 我会很高兴time t struct tm 或任何其他使其成为可能的表示 我的平台是Linux 这是我试图解决的具体
  • 除了减少内存使用之外,C# 静态函数的性能是否比非静态函数更好?

    我假设public or private static由于内存中只有静态目标的一份副本 因此目标必须减少内存使用量 看起来因为一个方法是静态的 所以该方法可能成为 CLR 编译器进一步优化的潜在点 超出了非静态函数所能实现的范围 不过只是一
  • CSS 自动完成字体大小[重复]

    这个问题在这里已经有答案了 当将鼠标悬停在浏览器的自动完成建议上时 我无法弄清楚如何增加或如何使用预览文本的默认字体大小 我在用着https tailwindcss com https tailwindcss com 适合所有风格 E g
  • 如何使用 javascript 将图像加载到 bootstrap 模式中

    我的设置是 4 个链接 如下 我希望每个链接都打开 myModal 但根据单击的链接 应该在模式中加载不同的图像文件 我让它适用于其中一个链接 li a href myModal 6 Teams a li li a href 5 Teams
  • CSS 翻译后是否可以“捕捉到像素”?

    我创建了一个模态框并使用克里斯 科耶提到的技术 http css tricks com centering percentage widthheight elements 到目前为止 我发现的唯一问题是 有时盒子会偏移半个像素 这会让一些孩
  • 用于选择具有最后一个子值的元素的 xpath

    这是我的 xml 文件
  • MVC 项目间共享布局

    我想知道是否有一种方法可以在所有项目之间共享 layout cshtml 文件 这样 如果我想更改我们公司的页面布局 我只需在一处更改即可 从我迄今为止看到的研究来看 人们提到了可能创建 dll 文件 另外我不是在谈论 mvc 中的区域 我
  • 编译时多态性和静态绑定有什么区别?

    This https stackoverflow com questions 10580 what is early and late binding链接帮助我理解静态绑定和动态绑定之间的区别 但我很困惑 静态绑定和编译时多态性有什么区别或