我在维基百科上读过关于“名称解析”的文章(名称解析WIKI ),C++使用的是“静态名称解析”。如果是这样的话,那么我就不知道C++是如何在不使用动态名称解析的情况下提供“多态性”的。
请回答C++是使用“静态名称解析”还是“动态名称解析”。如果它是静态的,您还能解释C++如何提供多态性吗?
发布于 2015-12-15 19:25:20
Wikipedia对名称解析的定义是关于如何将令牌解析为构造名称(函数、类型名称等)。考虑到这个定义,C++的名称分辨率是100%静态的。表示标识符的每个令牌必须在编译时与特定实体相关联.
C++多态性是一种有效的欺骗手段。编译器可以看到静态名称解析为使用virtual关键字定义的成员函数。如果编译器看到您正在调用的对象是一个动态对象(即:指向该类型的指针/引用,而不是该类型的值),编译器将发出特殊代码来调用该函数。
此特殊代码不会更改其解析的名称。它改变的是最终被调用的函数。这不是动态命名;这是动态函数分派。名称在编译时被解析;函数在运行时被解析。
发布于 2015-12-15 18:53:24
C++使用静态名称解析,因为它将每个函数重命名为使每个函数都具有惟一性。
这意味着函数int foo(int bar)将被编译器称为类似于_Z3fooi,而int foo(float bar)将被称为类似于_Z3foof的函数。
这就是我们所说的名称残缺。
https://stackoverflow.com/questions/34297034
复制相似问题