Про дивертуализацию у компилятора тоже можно упомянуть. В некоторых случаях, даже когда мы пытаемся вызвать вирутальную функцию, скачка в таблицу виртуальных функций не будет в рантайме, вызовется как обычная
Найдите pdf "Multiple inheritance for C++" Bjarne Straustrup. В google одно из первых выдает документ. При начальном знании языка, посидеть два вечера с переводчиком в свободное время.
Да ладно ? Прям в стандарте написано про очередность функций в vtable ? Стандарт вообще про vtable ничего не знает, это детали имплементации. То что clang gcc msvc это так имплементирует, не означает что нельзя по другому. Например можно хранить vtable прям в объекте, чтобы не делать дереференс на каждый виртул колл, теряя perfomance, более того в некоторых старых компляторах есть такая имплементация, и это соответсвтует стандарту. Стыдно учить тому, в чём сам не разбираешься ! Еще и про UB что то заикнулся. У стандарта нет ABI(Application Binary Interface), он для разных архитектур пишется.
@@Sergey-mq3ol В рекомендациях мусор этот вылез. Тебе в фронтенд, а не в плюсы если для тебя душно это. Если данный персонаж берётся за обучение других людей, то пусть хоть немного разберётся в теме.
Массив указателей на функции + ртти инфа про класс u64** vftable; Вызвать функцию из таблицы можно вот так: void(*fn)(void*) = reinterpret_cast(vftable[0]); fn(this); На эту тему есть пару лекций у Ильи Мещерина, там доходчиво все объясняется
@@vladimir_balun_programming , имею ввиду ТОЛЬКО на первых, в которых не используется слово virtual, или все таки на тех кто отнаследуется от первых потомков(без слова virtual у метода) тоже?
@@vladimir_balun_programming а терминологию "непосредственные" и "прямые" взял от начальников. Условно: Непосредственный - тот кому я отчитываюсь, показываю результат работы Прямой - начальник начальника, глава отдела
Объясняющему бы научиться слушать. Ни разу не дали человеку сформулировать вопрос. У Вас цель - научить или своими знаниями блеснуть?)) Как только ключевые слова слышите,, сразу перебиваете очередной попыткой рассказать, довольно сбивчивой, как будто боитесь, что вопрос окажется о том, чего Вы не знаете.
Про дивертуализацию у компилятора тоже можно упомянуть. В некоторых случаях, даже когда мы пытаемся вызвать вирутальную функцию, скачка в таблицу виртуальных функций не будет в рантайме, вызовется как обычная
Согласен, видео снято давно - про это тогда не знал
Почему скобки не по код-стайлу? В яндексе код-стайл, чтоб открывающая скобка была на одной строке с сигнатурой функции
Где Вы получал свои знания ? Что за книги или сайты которые так подробно объясняют. Спасибо большое за видео, жду новые!
Много читал, много смотрел видео, много практиковался. Потом, когда все это объединяется - получается очень интересная картинка в голове)
Найдите pdf "Multiple inheritance for C++" Bjarne Straustrup. В google одно из первых выдает документ. При начальном знании языка, посидеть два вечера с переводчиком в свободное время.
Или статью "Multiple inheritance considered useful". Не помню автора.
@@Ланс-м1в спасибо, отличный материал, раньше не встречал
Спасибо за видео. Повторить было полезно. Очень много времени в свое время потратил, чтобы найти информацию.
Владимир, я ничего не понял, но ты крут!
Спасибо!
Понял 90%
Да ладно ? Прям в стандарте написано про очередность функций в vtable ? Стандарт вообще про vtable ничего не знает, это детали имплементации. То что clang gcc msvc это так имплементирует, не означает что нельзя по другому. Например можно хранить vtable прям в объекте, чтобы не делать дереференс на каждый виртул колл, теряя perfomance, более того в некоторых старых компляторах есть такая имплементация, и это соответсвтует стандарту. Стыдно учить тому, в чём сам не разбираешься !
Еще и про UB что то заикнулся. У стандарта нет ABI(Application Binary Interface), он для разных архитектур пишется.
Душнила
Что ты тут делаешь если все знаешь
@@Sergey-mq3ol В рекомендациях мусор этот вылез. Тебе в фронтенд, а не в плюсы если для тебя душно это.
Если данный персонаж берётся за обучение других людей, то пусть хоть немного разберётся в теме.
@@ShadowFiend-zg4fe Лан, согласен, что чел не топ, извиняюсь, ты прав что обоссал его
Вы пишете: *можно хранить vtable прям в объекте, чтобы не делать дереференс на каждый виртул колл, теряя perfomance* Это чушь.
А как устроена сама vfptr? Это указатель ведет к таблице. А таблица сама это что, объект какого-то системного класса?
Массив указателей на функции + ртти инфа про класс
u64** vftable;
Вызвать функцию из таблицы можно вот так:
void(*fn)(void*) = reinterpret_cast(vftable[0]);
fn(this);
На эту тему есть пару лекций у Ильи Мещерина, там доходчиво все объясняется
"как яд на всех потомков", на всех непосредственных потомков? или на прямых тоже?)
Что имеется в виду под прямыми и непосредственными?
@@vladimir_balun_programming , имею ввиду ТОЛЬКО на первых, в которых не используется слово virtual, или все таки на тех кто отнаследуется от первых потомков(без слова virtual у метода) тоже?
@@vladimir_balun_programming а терминологию "непосредственные" и "прямые" взял от начальников.
Условно: Непосредственный - тот кому я отчитываюсь, показываю результат работы
Прямой - начальник начальника, глава отдела
на всех-всех
можно даже через потомков перепрыгивать, если в каком-то такой функции нет, а в следующем есть, то она будет виртуальной.
В идеале конечно бы с дебагингом объяснять, а то уже под конец запутался )
Спасибо, в будущем подумаю над этим!
обж дамп сделай и наслаждайся
Объясняющему бы научиться слушать. Ни разу не дали человеку сформулировать вопрос. У Вас цель - научить или своими знаниями блеснуть?)) Как только ключевые слова слышите,, сразу перебиваете очередной попыткой рассказать, довольно сбивчивой, как будто боитесь, что вопрос окажется о том, чего Вы не знаете.