функций в конструкторе
Есть вот такой код: https://pastebin.com/9e7A1jAL
При этом в шаблоне не планируется переопределять boo
Вывод у него ожидаемый:
foo::boo
foo::boo
zoo::boo
Вопрос вот в чем, а стандарт нам гарантирует, что вывод всегда будет именно таким?
То есть во время работы конструктора t будет вызываться именно p::boo, то есть функция, определенная непосредственно для параметра шаблона, а не та, что определена для foo
в конструкторе вызывается версия, определённая в текущем классе, не оверрайднутая из наследника
То есть вот в моем случае как происходит, например, в случае t<goo>. Вызывается та, что определена для goo (а так как он не переопределяет ее, то вызывается для `foo`) А в случае t<zoo> вызывается та, что переопределена для zoo Это все вполне логично, так как goo или zoo уже сконструированы к этому моменту, таблица виртуальных функций подменилась на их таблицу. Вопрос состоял в том, а не имеет ли право компилятор поступить так, как ниже? Сконструировать foo, сконструировать zoo, сконструировать t<zoo>, а затем уже заменить таблицу виртуальных функций сразу на ту, что для t<zoo> То есть после конструирования zoo не переписывать таблицу на его, а оставить прежнюю - для foo
В конструкторе не происходит обращение к таблице. Там происходит тоже что и для обычных функций
А, ну да, точно Спасибо
Обсуждают сегодня