C ++-初期化での静的割り当て

ダンブレナー

私がC ++関数を持っているとしましょう:

void foo(int x) {
    static int bar = x;
}

電話をかけたfoo(3)後、電話をかけるとfoo(4)、barの値は3のままであると理解しています。これはなぜですか。初期化のメモリ割り当て部分が冗長である理由を理解しています。しかし、なぜ割り当ても無視されるのですか?

ジョナサン・ウェイクリー

いくつかの異なる静的変数を検討してください。

void foo(int x) {
    static int bar = x;
    static std::string s1 = "baz";
    static std::string s2("baz");
    static int i{2};              // C++11-style uniform initialization
}

また、関数が呼び出されるたびs1に値を「割り当てる」必要があると思います"baz"か?どうs2ですか?どうiですか?

これらのステートメントはいずれも割り当てを実行せず、すべて初期化であり、一度だけ実行されます。ステートメントに=文字が含まれているからといって、それが割り当てになるわけではありません。

理由理由:言語は方法は、それが一度機能を実行するために、ローカル静的変数を使用するのが一般的だということであることを仕事に定義されています

bool doInit()
{
  // run some one-time-only initialization code
  // ...
  return true;
}

void func() {
  static bool init = doInit();
  // ...
}

場合はinit再び機能は、その後、呼び出されるたびに値が割り当てられてしまっdoInit()複数回呼び出さなるだろう、と1回限りのセットアップを実行し、その目的を失敗していましたが。

呼び出されるたびに値を変更したい場合は、簡単です...変更するだけです。あなたがいる場合でも、していない、それは変更を維持したい、言語が道を働いていた場合について、あなたは求めていることを実行する方法はありません。

static constローカル変数を持つことも不可能です:

void func() {
  static const bool init = doInit();
  // ...
}

おっと、これはinit呼び出されるたびにの値を変更しようとします。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

C ++:初期化と割り当て?

分類Dev

C構造体の初期化とメンバーの割り当て

分類Dev

Cでの動的メモリ割り当てと静的/自動メモリ割り当て

分類Dev

変数の初期化なしでmallocを使用してCポインターに値を割り当てる

分類Dev

静的構造の初期化C

分類Dev

初期化のように配列にデータを割り当てるC ++

分類Dev

C ++でのベクトルの静的割り当てと動的割り当ての違いは何ですか?

分類Dev

C#での静的リストの割り当てはアトミックです

分類Dev

Cでの静的メモリ割り当てと動的メモリ割り当てのコスト

分類Dev

C ++でのオブジェクトの配列の静的メモリ割り当て

分類Dev

CとC ++の静的初期化の違い

分類Dev

C ++ベクトル初期化リストと割り当て

分類Dev

宣言された配列に値を割り当てることと、C#で配列を作成して初期化することの違いは何ですか?

分類Dev

C ++での重複した静的変数の初期化

分類Dev

C99で静的変数を使用して静的変数を初期化する

分類Dev

C ++-初期化ではなく割り当てを使用してvector <vector <double >>行列を作成します

分類Dev

文字列で初期化されたCの静的char配列

分類Dev

テンプレートでのC ++静的const初期化順序

分類Dev

C#静的メンバーはContructorでの初期化後にnullになります

分類Dev

Cの配列にそれを割り当てる構造体内のintポインタを初期化する方法は?

分類Dev

c ++:宣言された変数が値に割り当てられずに初期化されるのはいつですか?

分類Dev

C#でオブジェクトを初期化する前にnullを割り当てる理由

分類Dev

C:構造体を初期化し、関数パラメーターのポインターに割り当てる

分類Dev

c ++静的const構造体の初期化

分類Dev

c ++静的初期化順序の大失敗

分類Dev

C#とC ++の静的配列での静的定数リストの初期化の効率

分類Dev

Cでの割り当ての混乱

分類Dev

Cでの文字の割り当て

分類Dev

Cでの値の割り当て

Related 関連記事

  1. 1

    C ++:初期化と割り当て?

  2. 2

    C構造体の初期化とメンバーの割り当て

  3. 3

    Cでの動的メモリ割り当てと静的/自動メモリ割り当て

  4. 4

    変数の初期化なしでmallocを使用してCポインターに値を割り当てる

  5. 5

    静的構造の初期化C

  6. 6

    初期化のように配列にデータを割り当てるC ++

  7. 7

    C ++でのベクトルの静的割り当てと動的割り当ての違いは何ですか?

  8. 8

    C#での静的リストの割り当てはアトミックです

  9. 9

    Cでの静的メモリ割り当てと動的メモリ割り当てのコスト

  10. 10

    C ++でのオブジェクトの配列の静的メモリ割り当て

  11. 11

    CとC ++の静的初期化の違い

  12. 12

    C ++ベクトル初期化リストと割り当て

  13. 13

    宣言された配列に値を割り当てることと、C#で配列を作成して初期化することの違いは何ですか?

  14. 14

    C ++での重複した静的変数の初期化

  15. 15

    C99で静的変数を使用して静的変数を初期化する

  16. 16

    C ++-初期化ではなく割り当てを使用してvector <vector <double >>行列を作成します

  17. 17

    文字列で初期化されたCの静的char配列

  18. 18

    テンプレートでのC ++静的const初期化順序

  19. 19

    C#静的メンバーはContructorでの初期化後にnullになります

  20. 20

    Cの配列にそれを割り当てる構造体内のintポインタを初期化する方法は?

  21. 21

    c ++:宣言された変数が値に割り当てられずに初期化されるのはいつですか?

  22. 22

    C#でオブジェクトを初期化する前にnullを割り当てる理由

  23. 23

    C:構造体を初期化し、関数パラメーターのポインターに割り当てる

  24. 24

    c ++静的const構造体の初期化

  25. 25

    c ++静的初期化順序の大失敗

  26. 26

    C#とC ++の静的配列での静的定数リストの初期化の効率

  27. 27

    Cでの割り当ての混乱

  28. 28

    Cでの文字の割り当て

  29. 29

    Cでの値の割り当て

ホットタグ

アーカイブ