コンストラクタ内の次の構造体の値を定義済みの値に初期化するにはどうすればよいですか?コンストラクタのビットフィールドを初期化する方法
私のコード例に示す両方のオプションが少し醜いように見える....
struct T_AnlagenInfo01
{
// Option A
T_AnlagenInfo01() : fReserve80_0(0), fReserve80_1(0),.... {};
// Option B
T_AnlagenInfo01()
{
memset(this, 0, sizeof(T_AnlagenInfo01));
}
unsigned long fReserve80_0 : 1;
unsigned long fReserve80_1 : 1;
unsigned long fReserve80_2 : 1;
unsigned long fReserve80_3 : 1;
unsigned long fReserve80_4 : 1;
unsigned long fReserve80_5 : 1;
unsigned long fReserve80_6 : 1;
unsigned long fReserve80_7 : 1;
unsigned long fReserve81_0 : 1; // 81
unsigned long fReserve81_1 : 1;
unsigned long fReserve81_2 : 1;
unsigned long fReserve81_3 : 1;
unsigned long fReserve81_4 : 1;
unsigned long fReserve81_5 : 1;
unsigned long fReserve81_6 : 1;
unsigned long fReserve81_7 : 1;
};
vtableも上書きするので、クラスに仮想関数がある場合は、 'memset'代替に注意してください。 –
ひどい命名規則。レガシー?とにかく、 'fReserve80_0(0)'は標準的な方法であり、memsetよりも実際にはあまり醜く、メンテナンス可能で型安全です。 –
@phresnel:Oooohはい... :-(新しい高速なマシンで使用すると、動作しなくなったレガシーコード –