これらは、いつも私を気にしていると私はへの決定的な答えを見つけていない静的な地元の人々についての二つの質問です:2つのこと
struct Test
{
static inline const char* name()
{
static const char* nameValue = "Name of Test";
return nameValue;
}
};
このメソッドはインラインであるため、このメソッドを呼び出す各コンパイル単位にこのメソッドのコピーが存在するはずです。しかし、ローカル静的変数nameValue
のインスタンスは1つだけでなければなりません(私が間違っていれば私を修正してください)。これはどのように達成されますか?関数の多くのインスタンスが生成されていますが、それらはすべて同じ静的ローカルを参照しています。コンパイラは、各関数に関連付けられた静的ローカルのグローバルテーブルを名前で管理していますか?
質問2:
struct Init
{
Init() {printf("init created\n");}
~Init() {printf("init destroyed\n");}
};
struct Test
{
static void func()
{
static Init init;
}
};
静的ローカル初期オブジェクトがFUNCの最初の呼び出し時に、一度だけ構築されます()。 func()の最初の呼び出しはいつコンパイラによって分かりますか?これがこのfuncの最初の呼び出しであるかどうかは、実行時にフラグを維持していますか?
これは、実装が定義しているので、コンパイラがどのようなコンパイラを使用しているかを記述する必要があります。 –
私は、使われている技術が一般的だと思いました。もしそうでなければ、コンパイラがg ++ –