• ベストアンサー

constの意味

constは値を変化させないものと習いました。 constとstaticを組み合わせて使うことはありますか? もしあったらどういった場合に2つを使用するのか教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • hofuhofu
  • ベストアンサー率70% (336/476)
回答No.3

void hoge(){ const char a[]={...} } のような感じで定数を使おうとした場合、hoge()を呼び出すたびにaは初期化されるわけですよね。 aが小さいときにはあまり問題ないですが、大きくなってくるとパフォーマンスが悪くなってくるのでstaticもつけることで初期化を最初の一回だけにすることができます。 あとはc++でclass間で共通の定数を使いたいときにも、両方合わせることで可能になります。 たとえばclass aの中にstatic constの変数xがあった時に、 a func1; a func2; とすると、func1.xとfunc2.xは共通のメモリ領域に格納されています。 グローバル変数の代用ということで。

basukento
質問者

お礼

const だけだと毎回初期化されるかという部分がすごく気になっていたところです。 後半は難しくて分からなかったけど、不変の値は const int year = 2003;よりも static const int year = 2003;の方がよいということですね。 ありがとうございました。

その他の回答 (2)

noname#30727
noname#30727
回答No.2

C言語(C++は除く)の場合、グローバル変数を使う事も少なくないでしょうから、constを付加して書き換えられないようにして、staticを付加して他のファイルから参照できないようにするって事はありえます。 反則っぽいですが、 static const int *p; この場合、pはstaticですがconstではないので、ポインタの場合は2つが並ぶ事はあります。

basukento
質問者

お礼

static const は他のファイルの参照のためでしたか。 後半は難しくて分かりませんでした。 ありがとうございました。

回答No.1

たぶん、VisualBasic などでのことだと思いますが・・・ Constは、定数です。 StaticやDim は、変数を定義するステートメントですので、目的がまったく異なります。 たとえば、Constは、 Const cZeiritsu As Integer = 5 などのように定義して、プログラム中では、 intZeigaku = intKingaku * cZeiritsu のように、固定値の代わりとして使います。 こうしておくと、税率が5%から変わったときに、 プログラム中のあちこちを探さなくて済むわけです。 Staticは変数を定義するステートメントですが、 Dim との比較をするとわかりやすいかもしれません。 Dim は、そのSubプロシジャの中でのみ有効ですので、 次にそのSubプロシジャを通ったときには、初期値に 戻ってしまっていますが、Staticは、先ほどの値を保持してくれます。 以下のコードをFormに貼り付けて実行し、Formを数回クリックするとわかるかと思います。 Private Sub Form_Click() Dim intDim As Integer Static intStatic As Integer intDim = intDim + 1 intStatic = intStatic + 1 MsgBox intDim MsgBox intStatic End Sub Dimの変数は、常に初期化されますので、1ですが、 Staticは、値を保持していますので、数が増えていきます。

関連するQ&A