static const
とはどう違いconst
ますか?例えば:
static const int a=5;
const int i=5;
それらの間に違いはありますか?いつどちらを使用しますか?
static
関数の外側の可視性または内側の変数の寿命を決定します。const
したがって、それ自体には何の関係もありません。
const
初期化後に値を変更していないことを意味します。
static
関数内とは、関数が実行される前後に変数が存在することを意味します。
static
関数の外側は、マークされたシンボルのスコープがstatic
その .c ファイルに限定され、その外側では見ることができないことを意味します。
技術的には (これを調べたい場合)、static
はストレージ指定子でconst
あり、型修飾子です。
違うのはつなぎ方です。
// At file scope
static const int a=5; // internal linkage
const int i=5; // external linkage
オブジェクトが定義されている翻訳単位の外で使用されない場合はi
、指定子を使用して宣言する必要がありstatic
ます。
これにより、コンパイラは (潜在的に) さらなる最適化を実行できるようになり、オブジェクトが翻訳単位の外で使用されていないことがリーダーに通知されます。