Информация об изменениях

Сообщение Re[2]: v-table vs if call от 01.12.2022 5:14

Изменено 01.12.2022 5:16 maks1180

Re[2]: v-table vs if call
M>>Или лучше сделать через if else заместо v-table ? В этом случаи есть шанс что gcc проинлайнит все вызовы и будет быстрее работать.

M>Ну, вообще-то нормальный компилятор может понять, когда можно напрямую вызвать. Если напрямую вызвать нельзя, то не пойму, как тебе if else поможет


Т.е. он может вызов виртуальной функции OnRecv, превратить в что-то типа:
if (v-table==Client1) call Client1.OnRecv
else
if (v-table==Client2) call Client2.OnRecv
else
call ClientCommon.OnRecv

У него же нет гарантий, что у меня не появиться Client3 ?
Re[2]: v-table vs if call
M>>Или лучше сделать через if else заместо v-table ? В этом случаи есть шанс что gcc проинлайнит все вызовы и будет быстрее работать.

M>Ну, вообще-то нормальный компилятор может понять, когда можно напрямую вызвать. Если напрямую вызвать нельзя, то не пойму, как тебе if else поможет


Т.е. он может вызов виртуальной функции ClientCommon::OnRecv, превратить в что-то типа:
if (v-table==Client1) call Client1::OnRecv
else
if (v-table==Client2) call Client2::OnRecv
else
call ClientCommon::OnRecv

У него же нет гарантий, что у меня не появиться Client3 ?