社区
C++ 语言
帖子详情
大家都进来说说对静态绑定与动态绑定的理解。
yeguangyuan
2010-08-26 07:51:07
静态绑定?动态绑定?
大家都有何见解呢
...全文
252
9
打赏
收藏
大家都进来说说对静态绑定与动态绑定的理解。
静态绑定?动态绑定? 大家都有何见解呢
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
ithiker
2010-08-27
打赏
举报
回复
动态绑定是多态实现的基础
yeguangyuan
2010-08-27
打赏
举报
回复
感谢大家的热情讨论,真的是受益匪浅
jizhongqing:特别感谢你从汇编角度来分析,让我立即更加的透彻了
xingshuqiang2009
2010-08-26
打赏
举报
回复
编译时绑定时静态绑定,运行时绑定为动态绑定
kyzyyhw
2010-08-26
打赏
举报
回复
个人认为 静态绑定是在运行前以绑定 数据和参数不可变 动态绑定是在运行时绑定 可由用户在运行时改变
jizhongqing
2010-08-26
打赏
举报
回复
其中ecx为调用时使用的this指针,不是虚表
jizhongqing
2010-08-26
打赏
举报
回复
啥叫见解不懂,知道啥时候用就行了
从汇编的角度看所谓的静态绑定就是直接 call 一个全局的内存地址,c++中的静态函数也不例外,
动态绑定是指 call [ecx]+ offset 其中ecx为调用时使用的this指针指向的类的虚表,一般位于类对象的开头4个字节,也就是this指向的一个dword值就是虚表指针,offset为函数相对于虚表指针的偏移,其实就是在查不同的表
一个子类继承父类,那么编译器完整copy一份父类的虚表给他,然后把新copy的这个表地址填写到子类的开头,也就是子类的虚表指针,子类如果不重写父类virtual函数,则不修改这份虚表,否则改写这虚表对应项
如果子类新加一个virtual函数,则在这个虚表里添加一项,所以调用父类还是子类完全依赖于使用的this指针,因为要调用的函数地址就是 (*(PDWORD)this)[funindex]
这就是vc实现的动态绑定,其他编译器没看过
腾斯基
2010-08-26
打赏
举报
回复
在编译期能够决定的,就是静态绑定。运行时决定的就是动态绑定。
典型的例子就是template和virtual function。
在编译完成后,dll就会存在template类的实例,这个是静态。继承类中的虚方法只有在调用时才会通过虚表找到真正要执行的函数,这个就是动态。
baihacker
2010-08-26
打赏
举报
回复
语言定义
语言实现
语言翻译
链接
加载
执行
一般认为最后一个中产生的约束是动态约束,其它的是静态约束。
ztenv
版主
2010-08-26
打赏
举报
回复
编译时确定和运行时确定;就是静态和动态的区别
butterknife-7.0.1.jar 及使用demo
最新的butterknife jar包,版本7.0.1及使用demo。如有不懂可以留言
深入
理解
C++的
动态
绑定
和
静态
绑定
为了支持c++的多态性,才用了
动态
绑定
和
静态
绑定
。
理解
他们的区别有助于更好的
理解
多态性,以及在编程的过程中避免犯错误。 需要
理解
四个名词: 1、对象的
静态
类型:对象在声明时采用的类型。是在编译期确定的。 2、对象的动态类型:目前所指对象的类型。是在运行期决定的。对象的动态类型可以更改,但是
静态
类型无法更改。 关于对象的
静态
类型和动态类型,看一个示例: class B { } class C : public B { } class D : public B { } D* pD
【C++】
理解
多态 之
静态
绑定
与
动态
绑定
静态
绑定
与
动态
绑定
静态
类型与动态类型
静态
绑定
与
动态
绑定
缺省参数与虚函数 为了支持C++的多态性,才用了
动态
绑定
与
静态
绑定
。
静态
类型与动态类型 对象的
静态
类型: 对象在声明时候的类型,是在编译时期确定的。 对象的动态类型: 目标所指向的对象,是在运行期决定的。对象的动态类型可以更改,但是
静态
类型无法更改。 示例: class B { } class C : public B { } class D : public B { } D* pD = new D();//pD的
静态
类型是它声明的类型D*,动
静态
绑定
与
动态
绑定
研究问题: https://www.cnblogs.com/ygj0930/p/6554103.html 要点: 一:
绑定
把一个方法与其所在的类/对象 关联起来叫做方法的
绑定
。
绑定
分为
静态
绑定
(前期
绑定
)和
动态
绑定
(后期
绑定
)。 二:
静态
绑定
静态
绑定
(前期
绑定
)是指:在程序运行前就已经知道方法是属于那个类的,在编译的时候就可以连接到类的中,定位到这个方法。 ...
教你通俗的
理解
静态
绑定
与
动态
绑定
##
静态
绑定
与
动态
绑定
考虑到程序是一条一条指令执行的,因此它的流程应该尽可能的简洁优雅。在此基础上,可以更方便的
理解
两种
绑定
机制。 ###
静态
绑定
**所谓
静态
,书同上文,就是在==编译期就可以确定的东西==**。
静态
绑定
,就是在编译器就可以进行
绑定
的意思。比如,**
静态
变量**和**
静态
方法**。总是通过`类名.方法名`,`类名.变量名`调用的。
静态
绑定
是根据声明来的,换句话
说
,是根据栈里的类型来的,再换句话来
说
,是根据==
静态
类型==来访问的(当然与之相对的有==动态类型==的
说
法)。除此之外,
C++ 语言
65,210
社区成员
250,518
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章