コンパイラの警告 (レベル 4) C4256
'function': 仮想基底クラスを含むクラス用コンストラクターは '...' を含んでいます。呼び出しは旧バージョンの Visual C++ と互換性がない可能性があります
互換性がない可能性があります。
次のコード例について考えます。 Microsoft C++ コンパイラのバージョン 7 より前のバージョンを使用してコンストラクタ S2::S2( int i, ... ) の定義をコンパイルし、現在のバージョンを使用して次の例をコンパイルした場合、特殊ケースの呼び出し規則の変更のため、S3 のコンストラクタの呼び出しが正しく機能しません。 両方が Visual C++ 6.0 を使用してコンパイルされた場合、省略記号にパラメーターが渡されていない限り、呼び出しはまったく正しく機能しません。
この警告を修正するには、
コンストラクターでは省略記号を使用しないでください。
プロジェクト内のすべてのコンポーネントが現在のバージョン (このクラスを定義または参照できるライブラリを含む) でビルドされていることを確認し、警告 プラグマを使用して警告を無効にします。
次の例では 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()
{
}