Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
[C++] apocalypse 02.08.01 08:42 Число просмотров: 812
Автор: irka Статус: Незарегистрированный пользователь
|
> If your “C++” experience is the same as your English > experience then I don’t have to argue with you. You will > understand it later (in 1~2 years). :-) :-) :-) :-)
Ой, ой, ой. Пальцы прямо из экрана лезут...
> foo() > { > f(); > //is equal to > this->f();//address is used, which > //means the information is incomplete. Now you see it. > Late binding. > //if you don’t believe me look at this assembler code > generated by VC compiler. > > 62: this->f(); > 00401589 mov eax,dword ptr [ebp-4] > 0040158C mov edx,dword ptr [eax] > 0040158E mov esi,esp > 00401590 mov ecx,dword ptr [ebp-4] > 00401593 call dword ptr [edx+4] > 00401596 cmp esi,esp > 00401598 call __chkesp (00401c50) > 63: f(); > 0040159D mov eax,dword ptr [ebp-4] > 004015A0 mov edx,dword ptr [eax] > 004015A2 mov esi,esp > 004015A4 mov ecx,dword ptr [ebp-4] > 004015A7 call dword ptr [edx+4] > 004015AA cmp esi,esp > 004015AC call __chkesp (00401c50)
А к чему ты это нарисовал? kabanchik(а) неустраивало как раз раннее связывание в обход vtbl в случае вызова d.f() для этого примера. Ты бы предыдущие постинги почитал бы или гордыня не позволяет?
> > > // Early binding (probably): > > ^^^^^^^^^^^^^ good words. you can only suppose, but I > gues > > you are not sure. > Yes, I am not sure. But many compilers were constructed to > do “early binding” there.
Ой я сейчас умру. Я все думала кто-же такой под плюсиками скрывается, а это оказывается Bruce Eckel собственной персоной. Интересно, а собственный пример ты можешь изобразить или только из книжки copy/paste?
> Chto takoe "З.Ы." ? :-} Ты бы это... русский шрифт бы себе поставил что-ли. Который год все на велапуке общаешься, глядишь и узнал бы что такое "З.Ы.".
2kabanchik: В общем в таком поведении компиляторов нет ничего странного, как бы по умолчанию компилятор должен использовать раннее связывание там где это возможно. И в случае с явным указанием класса, функцию которого следует вызвать, компилятор и должен вызвать функцию "напрямую" без обращения к таблице. Фокусы с заменой vtbl "запрограммированы" не были ;))))
|
|
|