私は構造体リファクタリング時にstruct safeの集約初期化が行われていますか?
SomeStruct
{
double y;
double x;
};
を持っていると私はどこか
SomeStruct s{1,2}; //y=1 x=2
ようにそれを初期化し、私がするので
SomeStruct
{
double x;
double y;
double z;
};
に私の構造体を並べ替えた場合、私のコードは静かに破ることができると思われる場合今度はSomeStruct s{1,2}
は、x = 1、y = 2、z = 0を意味します。
編集: 引数は、コンストラクタが同じ問題を抱えているということですが、現実のIDEを使用している場合は、引数の名前とオーダーを一般的に見ることができます。
これまで言及したことは誰も見たことがありませんが、データのレイアウトを決して変更しないことが確実な場合は、このような集約初期化を安全に使用できるようです。それはまれな状況でしょうか?「非同質の構造体に集約初期化を使用しない」という暗黙のルールがありますか?
コンストラクタは実際に同じ問題を抱えています。これは初期化よりも型の問題です。 –
しかし、新しいオブジェクトをコンストラクタに追加すると、新しいオブジェクトがない場合はコードがコンパイルされません。問題では、コードがコンパイルされ、誰もエラーがあると認識することはありません。 – Ventu
@Ventu:そうですが、同じタイプのフィールドを並べ替えたり、コンストラクタパラメータを並べ替えると、静かな変更を導入することができます。 –