1

我一直在阅读维基百科(名称解析 WIKI)中的“名称解析”,并且已经给出 C++ 使用“静态名称解析”。如果这是真的,那么我无法弄清楚 C++ 如何在不使用动态名称解析的情况下设法提供“多态性”。

谁能回答 C++ 是使用“静态名称解析”还是“动态名称解析”。如果是静态的,能否也解释一下 C++ 是如何提供多态性的。

4

2 回答 2

7

Wikipedia 对名称解析的定义是关于如何将标记解析为构造的名称(函数、类型名等)。鉴于该定义,C++ 是 100%静态的,其名称解析。每个表示标识符的标记都必须在编译时与特定实体相关联。

C++ 多态性实际上是在作弊。编译器可以看到静态名称解析为使用virtual关键字定义的成员函数。如果编译器发现您调用它的对象是动态对象(即:指向该类型的指针/引用而不是该类型的值),编译器会发出特殊代码来调用该函数。

此特殊代码不会更改它解析为的名称。它改变的是最终被调用的函数。那不是动态命名;那就是动态函数调度。该名称在编译时被解析;该函数在运行时得到解析。

于 2015-12-15T19:25:20.110 回答
0

C++ 使用静态名称解析,因为它重命名每个函数以使每个函数都具有唯一性。
这意味着该函数int foo(int bar)将被编译器称为类似的东西_Z3fooi,而int foo(float bar)将被称为类似的东西_Z3foof
这就是我们所说的名字 mangling

于 2015-12-15T18:53:24.617 回答