gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:21:55 25 4
gpt4 key购买 nike

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

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

最佳答案

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

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

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

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

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com