2013-02-20 11 views
10

CおよびC++では、ローカル変数を作成する利点は何ですかconst変数static?初期化で他の変数が使用されないと仮定すると、呼び出し間で値を保持し、各呼び出しで同じ定数値を設定することに違いはありますか?C/C++静的constローカル変数の目的

有効なCコンパイラはstaticを無視できますか?

C++では、呼び出し間の構築/破壊を回避しますが、その他の利点がありますか?

+1

what - to 'const'、' static'、または修飾子がまったくないのとは対照的に? – MathSquared

+0

私はちょうど質問を編集しました。 varが実際にconstであると仮定します。 – yukon

+2

あなたがここに必要なものを見つけるかもしれません:http://stackoverflow.com/questions/3709207/c-semantics-of-static-const-vs-const – Carl

答えて

6

それはあなたのようなものを持っている場合の利益とすることができるスタックスペースを取りません。

明らか
static const double table[fairly_large_number] = { .... }; 

、建設コストも十分な機能がたくさん呼び出された場合は、そこだとかなりのことができます一度オブジェクトを構築するだけで良い値です。

+0

スタックスペースを占有することについてのあなたのポイントは、それが 'const'なので初期化されなければならないことがわかるまで、意味があります。ソースファイルに定数として入れることができるものは、スタックに簡単に収まる可能性があります。 –

+0

うーん、それは役に立ちます。もう一つの小さな質問は、揮発性の変数が登録される可能性がありますか? – yukon

+0

@ MarkRansom:a)それはスタックのサイズに依存します、b)私が持っているこのようないくつかの異なるもの。そして、私が何をしていても、イニシャライザのリストはどちらにせよ私のコードの一部になります。たとえば、ワードプロセッサでハードコードされたタイムズローマンフォントの定数テーブルがマシンによって生成された場合、スタックが置かれていてもスタックに置くのは良いことではありません非常に大きい。私は実際にテーブルにLARGEテーブルを持つコードを書いています。なぜなら、テーブルを構築するコードをプログラムに持つよりも意味があるからです。 –

2

はい、それは巨大です:意味利点。

constを入力すると、コンパイラで変数を変更できないようにするだけではありません。コードを後で読む人には大胆な声明を出します。これは決して変化しません。この変数を別の関数へのポインタとして与える副作用でさえもありません。

また、コンパイラは、処理している特定のタイプに応じて、新しい情報を活用し、状況によっては最適化することができます。

(明確にするために、私はここでおよそ constnon-const、ない staticnon-static話しています。)

編集This SO answerはあまりにも非常に有益です。