コンパイラの警告 (レベル 4) C4256

'function': 仮想基底クラスを含むクラス用コンストラクターは '...' を含んでいます。呼び出しは旧バージョンの Visual C++ と互換性がない可能性があります

互換性がない可能性があります。

次のコード例について考えます。 Microsoft C++ コンパイラのバージョン 7 より前のバージョンを使用してコンストラクタ S2::S2( int i, ... ) の定義をコンパイルし、現在のバージョンを使用して次の例をコンパイルした場合、特殊ケースの呼び出し規則の変更のため、S3 のコンストラクタの呼び出しが正しく機能しません。 両方が Visual C++ 6.0 を使用してコンパイルされた場合、省略記号にパラメーターが渡されていない限り、呼び出しはまったく正しく機能しません。

この警告を修正するには、

  1. コンストラクターでは省略記号を使用しないでください。

  2. プロジェクト内のすべてのコンポーネントが現在のバージョン (このクラスを定義または参照できるライブラリを含む) でビルドされていることを確認し、警告 プラグマを使用して警告を無効にします。

次の例では C4256 が生成されます:

// C4256.cpp
// compile with: /W4
// #pragma warning(disable : 4256)
struct S1
{
};

struct S2: virtual public S1
{
   S2( int i, ... )    // C4256
   {
      i = 0;
   }
   /*
   // try the following line instead
   S2( int i)
   {
      i = 0;
   }
   */
};

void func1()
{
   S2 S3( 2, 1, 2 );   // C4256
   // try the following line instead
   // S2 S3( 2 );
}

int main()
{
}