c++ - 功能覆盖在哪里完成?

标签 c++ python ruby overloading overriding

在创建程序、编译器、链接器等的过程中,函数的覆盖和运算符重载是在什么地方完成的?

我特别感兴趣它是用 C++、Ruby 和 Python 完成的。

最佳答案

函数重载(至少在 C++ 中)是在编译器内部处理的。这个想法是,编译器最终生成的代码将被硬编码以调用适当的函数,就好像所有函数都有不同的名称并且您调用了唯一适合参数的函数一样。更一般地说,在大多数支持重载的编译语言中,重载解析是在编译时完成的,发出的代码将始终调用指定的函数。例如,Haskell 以这种方式支持编译时重载。

运算符重载是一般重载的特例,所以通常以同样的方式处理。

函数覆盖(当派生类从基类继承并重新定义其中一个方法时,OOP 中出现的一个术语)几乎总是在运行时解析,因为编译器不能总是告诉将在运行时实际不知道类型的情况下调用哪个函数。一些编译器可能能够静态地证明某个对象具有特定类型,然后可以优化动态分派(dispatch),但不可能在所有情况下都这样做。

我不知道有任何支持重载的动态语言,因为理论上您可以在程序运行时引入新的重载候选者。如果存在这样的语言,我很乐意得到启发。

关于c++ - 功能覆盖在哪里完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6809998/

相关文章:

c++ - 我可以用算术运算的方式编写关系运算符吗?

c++ - 哪些 std::async 实现使用线程池?

c++ - 用dlsym加载so文件,无法加载库

python - 调车场算法中复杂的表达式导致计算器错误

ruby - Ruby 中的递归。我这样做正确吗?

ruby-on-rails - 设计错误 : undefined method `current_sign_in_ip'

c++ - 对于字符串中的每个字符给出错误的结果

python - 从 FLASK 应用程序运行 Celery Worker

python - python中的轮子是什么

ruby - 如何编写单行 block