Пусть:C++ динамическое связывание с перегрузкой
struct A {
virtual int foo(const A& a) const { return 1; }
};
struct B : A {
virtual int foo(const A& a) const { return 2; }
virtual int foo(const B& b) const { return 3; }
};
void testOverloadingBinding(const A& a,const B& b) {
cout << a.foo(b);
}
int main() {
testOverloadingBinding(B(),B());
}
Он печатает 2. Я бы предположить, что это печатает 3, так как this
связывание является динамическим, и, насколько я знаю, перегрузкой имеет статическое связывание. Может ли кто-нибудь объяснить, как компилятор решает, какую функцию вызывать здесь?
Что заставляет вас думать, что C++ будет поддерживать двойную отправку в будущем? –
@Oli Charlesworth 1 - это упростит посетитель шаблона. 2 - накладные расходы будут выполняться только в случае определения типа виртуального (см. Предложение). 3 - это упростит использование мультиметодов. 4 - это инициатива от Бьярна Страуструпа :) – innochenti