16

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

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

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

4

2 に答える 2

9

スタックを占有しません-次のようなものがある場合は、スペースが役立つ可能性があります。

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

明らかに、構築のコストも十分に高くなる可能性があるため、関数が大量に呼び出された場合、オブジェクトを1回だけ構築することに価値があります。

于 2013-02-20T23:55:36.527 に答える
3

はい、そしてそれは巨大です:意味論的利益。

を置くときconst、それはコンパイラが変数を変更することを許可してはならないという意味ではありません。後でコードを読む人には、より大胆な発言をします。これは決して変わりません。この変数を別の関数へのポインターとして指定するという副作用によってもそうではありません。

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

(明確にするために、私はここで対について話しているのでconstあって、対について話しているnon-constのではありません。)staticnon-static

編集このSOの答えも非常に有益です。

于 2013-02-20T23:58:20.317 に答える