假設結合: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++將在未來支持雙派遣? – 2012-02-19 20:50:46
@Oli Charlesworth 1 - 它將簡化模式訪問者。 2 - 開銷將只在虛擬類型定義的情況下(見提議)。 3 - 它將簡化multimethods的使用。 4 - 它是來自Bjarne Stroustrup的倡議:) – innochenti 2012-02-19 21:39:24