首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++是使用静态名称解析还是动态名称解析?

C++是使用静态名称解析还是动态名称解析?
EN

Stack Overflow用户
提问于 2015-12-15 18:46:01
回答 2查看 393关注 0票数 1

我在维基百科上读过关于“名称解析”的文章(名称解析WIKI ),C++使用的是“静态名称解析”。如果是这样的话,那么我就不知道C++是如何在不使用动态名称解析的情况下提供“多态性”的。

请回答C++是使用“静态名称解析”还是“动态名称解析”。如果它是静态的,您还能解释C++如何提供多态性吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-15 19:25:20

Wikipedia对名称解析的定义是关于如何将令牌解析为构造名称(函数、类型名称等)。考虑到这个定义,C++的名称分辨率是100%静态的。表示标识符的每个令牌必须在编译时与特定实体相关联.

C++多态性是一种有效的欺骗手段。编译器可以看到静态名称解析为使用virtual关键字定义的成员函数。如果编译器看到您正在调用的对象是一个动态对象(即:指向该类型的指针/引用,而不是该类型的值),编译器将发出特殊代码来调用该函数。

此特殊代码不会更改其解析的名称。它改变的是最终被调用的函数。这不是动态命名;这是动态函数分派。名称在编译时被解析;函数在运行时被解析。

票数 7
EN

Stack Overflow用户

发布于 2015-12-15 18:53:24

C++使用静态名称解析,因为它将每个函数重命名为使每个函数都具有惟一性。

这意味着函数int foo(int bar)将被编译器称为类似于_Z3fooi,而int foo(float bar)将被称为类似于_Z3foof的函数。

这就是我们所说的名称残缺

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34297034

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档