const

そのままの君でいて


今までの 変数 は、スコープ内であれば文字通りどこでも値を書き換えることができた。

できたんだ。

これはたしかに便利だけど、数の別名 として変数を使っていた場合は 変更できるとめんどくさいこと になる。

double tax = 1.08; // 税率 8% なので 1.08倍

int price = 500;
price *= tax;

// :
// :

tax = 1.10; // いつのまにか 10% に

// :
// :

price = 800;
price *= tax; // あれ?

変更できることが、逆に混乱を招いたりバグを生むことがある。

そこで型に const (定まった、constant の略) 修飾子をつけると、const な型になる。変数の型のところに使えば const な変数が作れる。

// 前でも後でもいい
int const a;
const int b;
int const c, d; // 同時に 2 つ

この変数を作るときに値を入れることを 初期化 というのだけれど、この初期化のタイミングでしか値をセットできない。

そして、変数を作った後は 代入できなくなる。コンパイラがどこかで うっかり代入していないかチェックしてくれる んだ!

double const tax = 1.08; // 税率 8% = 1.08倍

int price = 500;
price *= tax;

// :
// :

tax = 1.10; // コンパイルできない

// :
// :

price = 800;
price *= tax; // 安心して tax が使える

const の値を別の変数にコピーすることはできる。

const int magical = 4444;
int temp = magical;

引数にも const 指定はできる。

int add(int left, int right) {
  left += right - right; // (意味はない)
  return left + right;
}

int add_const(int const left, int const right) {
  left += right - right; // NG
  return left + right;
}

現時点では役に立たないけど、次の次のページで応用的に使う。