/vmm、/vms、/vmv (通常の最適化)
/vmb、/vmg (処理形式) が処理形式として選択されたときに使用します。 これらのオプションは、まだ検出されていないクラス定義の継承モデルを示します。
/vmm
/vms
/vmv
解説
これらのオプションの説明を次の表に示します。
オプション |
説明 |
---|---|
/vmm |
クラスのメンバーへの最も一般的なポインター表現を多重継承するクラスに対して指定します。 対応する継承キーワードおよび #pragma pointers_to_members の引数は multiple_inheritance です。 この表現は、単一継承に必要な表現よりもサイズが大きくなります。 メンバーへのポインターが宣言されているクラス定義の継承モデルが仮想モデルの場合、コンパイラはエラーを出力します。 |
/vms |
クラスのメンバーへの最も一般的なポインター表現を何も継承しないクラスか、単一継承するクラスに対して指定します。 対応する継承キーワードおよび #pragma pointers_to_members の引数は single_inheritance です。 これは、クラスのメンバーへのポインターの最小サイズの表現です。 メンバーへのポインターが宣言されているクラス定義の継承モデルが多重継承モデルまたは仮想モデルの場合、コンパイラはエラーを出力します。 |
/vmv |
クラスのメンバーへの最も一般的なポインター表現を仮想継承するクラスに対して指定します。 エラーになることはありません。これは、既定の設定です。 対応する継承キーワードおよび #pragma pointers_to_members の引数は virtual_inheritance です。 このオプションは、ポインターを解釈するために、ほかのオプションよりもポインターのサイズが大きくなり、追加コードが必要になります。 |
上のどの継承モデル オプションを選択しても、クラス メンバーを指すすべてのポインターに対してそのモデルが適用されます。継承の種類やポインター宣言の位置 (クラス定義の前または後ろ) は関係ありません。 したがって、常に単一継承のクラスを使用している場合は、/vms を使ってコンパイルするとコード サイズが小さくなります。最も一般的な方法でコンパイルするには、 /vmv を使ってコンパイルします。ただし、このオプションではデータ表現が大きくなります。
Visual Studio 開発環境でこのコンパイラ オプションを設定するには
プロジェクトの [プロパティ ページ] ダイアログ ボックスを開きます。 詳細については、「方法 : プロジェクト プロパティ ページを開く」を参照してください。
[C/C++] フォルダーをクリックします。
[コマンド ライン] プロパティ ページをクリックします。
[追加のオプション]ボックスにコンパイラ オプションを入力します。
このコンパイラ オプションをコードから設定するには
- AdditionalOptions を参照してください。