☝️Объяснение:
Виртуальные функции берут стандартный аргумент из самого Base класса. Поэтому ответ будет B1.
Многие стайлгайды запрещают это, потому что ведёт к таким странным ошибкам. Почему так сделано -- понятно, если у вас есть динамический тип, то мы должны где-то ещё хранить информацию о дефолтных аргументах, так как они обязаны вычисляться до вызова функции. Так как виртуализация в C++ сделана через разыменовывание vptr, где грубо говоря будут храниться указатели на функции, то единственный вариант дефолтного аргумента -- в самом интерфейсе.
Post #682
213
- 🔥 2
- 👍 1