重複の可能性:
構造体を再初期化する簡単な方法を探しています
私の問題が何と呼ばれているのか実際にはわからないので、解決策を探すのにあまり運がありませんでした。
構造体を既存の変数に初期化したい。
struct s { int i; };
s inst = { 7 }; // valid
inst = { 9 }; // invalid
どうすればこのようなことを達成できますか?
重複の可能性:
構造体を再初期化する簡単な方法を探しています
私の問題が何と呼ばれているのか実際にはわからないので、解決策を探すのにあまり運がありませんでした。
構造体を既存の変数に初期化したい。
struct s { int i; };
s inst = { 7 }; // valid
inst = { 9 }; // invalid
どうすればこのようなことを達成できますか?
定義上、インスタンスを初期化できるのは 1 回だけです。オブジェクトが初期化されると、できることはその状態を変更することだけです。inst
あなたの例では、データ メンバーが value を保持するようにオブジェクトの状態を変更したいと仮定すると、オブジェクト9
の 'i' データ メンバーに割り当てることができs
ます。
inst.i = 9;
もう 1 つのオプションは、一時的なs
インスタンスを自分のインスタンスに割り当てることです。テンポラリは、 value を保持するデータ メンバーで構築されます9
。
inst = s{9};
まず、オブジェクトをデフォルトで初期化してから、メンバーに次のように割り当てることができます。
s inst;
inst.i = 7;
ただし、これは技術的には初期化ではありません。構造体にユーザー定義のコンストラクターがある場合は、それを使用してメンバーを初期化できます。そのような
struct s
{
s(int i) :i(i) {}
int i;
};
s inst(7);
ただし、構造体が集約である場合 (つまり、ユーザー定義のコンストラクター、仮想関数、ベース、または非公開の非静的データ メンバーがない場合)、そのメンバーを中かっこで初期化できます。あなたの場合s
、集約構造体です。
s inst = {7};
集計の完全な定義とその使用法を読むには、私のこの FAQ を参照してください