Я знаю, что виртуальные функции имеют накладные расходы на разыменование, чтобы вызвать метод. Но я думаю, что с современной архитектурой скорость почти ничтожна.
- Есть ли какая-то особая причина, почему все функции в С++ не являются виртуальными, как в Java?
- Насколько я знаю, определение функции virtual в базовом классе является достаточным/необходимым. Теперь, когда я пишу родительский класс, я, возможно, не знаю, какие методы будут преодолены. Значит ли это, что при написании дочернего класса кому-то придется редактировать родительский класс. Это звучит как неудобно, а иногда и невозможно?
Update:
Подводя итог от Jon Skeet, ответьте ниже:
Это компромисс между явным пониманием того, что кто-то понимает, что они наследуют функциональность [которая имеет потенциальные риски сама по себе [(отметьте ответ Джона)] [и потенциальный небольшой прирост производительности] с компромиссом за меньшую гибкость, больше изменений кода и более крутую кривую обучения.
Другие причины из разных ответов:
Виртуальные функции не могут быть связаны друг с другом, поскольку в процессе выполнения встроенные функции должны выполняться. Это влияет на производительность, когда вы ожидаете, что функции будут полезны при встраивании.
Там могут быть и другие причины, и я хотел бы узнать и обобщить их.