0

重複の可能性:
構造体を再初期化する簡単な方法を探しています

私の問題が何と呼ばれているのか実際にはわからないので、解決策を探すのにあまり運がありませんでした。

構造体を既存の変数に初期化したい。

struct s { int i; };
s inst = { 7 }; // valid
inst = { 9 }; // invalid

どうすればこのようなことを達成できますか?

4

2 に答える 2

1

定義上、インスタンスを初期化できるのは 1 回だけです。オブジェクトが初期化されると、できることはその状態を変更することだけです。instあなたの例では、データ メンバーが value を保持するようにオブジェクトの状態を変更したいと仮定すると、オブジェクト9の 'i' データ メンバーに割り当てることができsます。

inst.i = 9;

もう 1 つのオプションは、一時的なsインスタンスを自分のインスタンスに割り当てることです。テンポラリは、 value を保持するデータ メンバーで構築されます9

inst = s{9};
于 2012-10-14T10:34:16.607 に答える
0

まず、オブジェクトをデフォルトで初期化してから、メンバーに次のように割り当てることができます。

s inst;
inst.i = 7;

ただし、これは技術的には初期化ではありません。構造体にユーザー定義のコンストラクターがある場合は、それを使用してメンバーを初期化できます。そのような

struct s
{
    s(int i) :i(i) {}
    int i;
};

s inst(7);

ただし、構造体が集約である場合 (つまり、ユーザー定義のコンストラクター、仮想関数、ベース、または非公開の非静的データ メンバーがない場合)、そのメンバーを中かっこで初期化できます。あなたの場合s、集約構造体です。

s inst = {7};

集計の完全な定義とその使用法を読むには、私のこの FAQ を参照してください

于 2012-10-14T10:37:52.343 に答える