Требуется ли для этой модификации указатель на полиморфное наследование? Во всех случаях, когда я видел, что эта корректировка указателя обсуждалась, используемые примеры включали полиморфное наследование через ключевое слово virtual
.Выполняется ли эта корректировка указателя для не полиморфного наследования?
Мне непонятно, потребует ли эта корректировка указателя не полиморфное наследование.
Очень простой пример был бы:
struct Base1 {
void b1() {}
};
struct Base2 {
void b2() {}
};
struct Derived : public Base1, Base2 {
void derived() {}
};
ли следующий вызов функции требуют такой корректировки указателя?
Derived d;
d.b2();
В этом случае эта корректировка указателя будет явно излишней, поскольку к ним не будут доступны данные. С другой стороны, если унаследованные функции обращаются к элементам данных, то эта корректировка указателя может быть хорошей идеей. С другой стороны, если функции-члены не встроены, похоже, что эта настройка указателя необходима независимо от того, что.
Я понимаю, что это деталь реализации, а не часть стандарта C++, но это вопрос о том, как ведут себя настоящие компиляторы. Я не знаю, является ли это примером, например, vtables, где все компиляторы следуют одной и той же общей стратегии или если я задал вопрос, зависящий от компилятора. Если он очень зависим от компилятора, то это само по себе будет достаточным ответом или, если хотите, вы можете сосредоточиться на gcc или clang.
Я не вижу никаких указателей. Существует ясный, прямой, конкретный путь к методу 'b1', поэтому vtable может не понадобиться. Помните, что * vtables * не требуются спецификацией языка C++. Компилятор может вызвать метод напрямую. –