Shammer's Philosophy

My private adversaria

const 修飾子

配列を関数の引数として渡されると参照渡しになる話を前回したが、それに付随する話を少し。
プログラムの要件として、渡された引数の値を変更させたくない、という場合がある。
当然、APIドキュメントなどでそう記述しておくのもよいかもしれないが、
それだけでは破ろうと思えばいくらでも破れてしまう。
そういう要件を実現するため、C言語には const 修飾子というのがある。
たとえば、


void tryToModifyArray(const int b[]){
 b[0] =2;
 b[1] =2;
 b[2] =2;
}


という実装を含むソースをコンパイルしようとするとコンパイルエラーとなる。
tryToModifyArray関数内で引数の配列情報を変更しようとしているためだ。
Javaだと配列を引数で渡すときにfinalを使っても、その参照を変更することができないだけで
値の変更も禁止するためには別の方法を利用しなければならなかった記憶が・・・
Cだとこれだけで配列の中身変更も防げるようだ。
いいか悪いかとかそういう判断はできないけれどそういうものなんだと思うことにしよう。