为什么 C++ 中的链接器比 C 中的任务更艰巨? [已关闭]

问题描述 投票:0回答:2

面试官问我这个问题,不确定我的回答是否足够好。大家有什么想法吗?

c++ c linker
2个回答
0
投票

我脑海中浮现的第一个想法是名称修改。在 C++ 中,但在 C 中不行,可以有两个名称相同但参数不同的方法。编译器必须区分这两种方法,从而在内部更改(破坏)名称。

C++ 编译器必须做的另一件事(而不是 C)是处理类继承。你有抽象类、重写方法和虚拟方法。这需要更多的处理才能解决。


0
投票

我不能说我非常理解这一点,但是Ian Lance Taylor 的这篇博客文章似乎有一个答案。 引用那里:

使用 C++ 时存在一些特殊的挑战。向类添加新的虚拟方法可以是使用该类的任何函数的 ABI 更改。在这种情况下提供类的向后兼容版本是非常尴尬的——没有自然的方法来指定用于虚拟表的名称和版本或旧版本的 RTTI 信息。

当然,您绝不能删除任何符号。

阅读该条目了解更多背景信息。 (ABI = 应用程序二进制接口)

© www.soinside.com 2019 - 2024. All rights reserved.