面试官问我这个问题,不确定我的回答是否足够好。大家有什么想法吗?
我脑海中浮现的第一个想法是名称修改。在 C++ 中,但在 C 中不行,可以有两个名称相同但参数不同的方法。编译器必须区分这两种方法,从而在内部更改(破坏)名称。
C++ 编译器必须做的另一件事(而不是 C)是处理类继承。你有抽象类、重写方法和虚拟方法。这需要更多的处理才能解决。
我不能说我非常理解这一点,但是Ian Lance Taylor 的这篇博客文章似乎有一个答案。 引用那里:
使用 C++ 时存在一些特殊的挑战。向类添加新的虚拟方法可以是使用该类的任何函数的 ABI 更改。在这种情况下提供类的向后兼容版本是非常尴尬的——没有自然的方法来指定用于虚拟表的名称和版本或旧版本的 RTTI 信息。
当然,您绝不能删除任何符号。
阅读该条目了解更多背景信息。 (ABI = 应用程序二进制接口)