为什么链接器在C ++中与C相比有更艰巨的任务?

时间:2012-11-22 01:39:10

标签: c++ c compiler-construction linker

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

2 个答案:

答案 0 :(得分:0)

我不能说我理解得很清楚,但这blog entry by Ian Lance Taylor似乎有一个答案。引自那里:

  

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

     

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

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

答案 1 :(得分:0)

在我脑海中突然出现的第一个念头是名字错误。在C ++中但不在C中,您可以使用两个名称相同但参数不同的方法。编译器必须区分这两种方法,从而在内部更改(修改)名称。

C ++编译器必须在C中编写的另一件事是处理类继承。您有抽象类,重写方法和虚方法。这需要更多的处理来解决。