0

1つの仮想関数を持つ基本クラスがあります

class Base
{
public:
    virtual void print() {
        cout<<"IN BASE\n";
    }
}

今、私はそのオブジェクトを作成します

Base b

とコール

b.print();

「ベース」クラスには1つの仮想関数が含まれ、そのVTableが作成されるため、これは動的バインディングですか..

4

2 に答える 2

4

オブジェクトが作成されるのと同じコンテキストでは、コンパイラは正確な型を認識しているため、仮想ディスパッチを使用する必要はありません。しかし、それは仮想関数の数とは関係ありません (そして、少なくとも 1 つある限り、コンパイラはvtableを生成し、オブジェクトにvptrを格納します)。

Base b;
b.print(); // can be optimized to b.Base::print(),
           // with no virtual dispatch

void f( Base& b ) {
   b.print();       // must use virtual dispatch (ignoring potential inlining)
}
于 2012-08-03T17:55:28.463 に答える