- ベストアンサー
constの意味
constは値を変化させないものと習いました。 constとstaticを組み合わせて使うことはありますか? もしあったらどういった場合に2つを使用するのか教えてください。
- みんなの回答 (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は共通のメモリ領域に格納されています。 グローバル変数の代用ということで。
その他の回答 (2)
C言語(C++は除く)の場合、グローバル変数を使う事も少なくないでしょうから、constを付加して書き換えられないようにして、staticを付加して他のファイルから参照できないようにするって事はありえます。 反則っぽいですが、 static const int *p; この場合、pはstaticですがconstではないので、ポインタの場合は2つが並ぶ事はあります。
お礼
static const は他のファイルの参照のためでしたか。 後半は難しくて分かりませんでした。 ありがとうございました。
- respect178
- ベストアンサー率0% (0/2)
たぶん、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は、値を保持していますので、数が増えていきます。
お礼
const だけだと毎回初期化されるかという部分がすごく気になっていたところです。 後半は難しくて分からなかったけど、不変の値は const int year = 2003;よりも static const int year = 2003;の方がよいということですね。 ありがとうございました。