宣言の位置
C言語では、ローカル変数の宣言を関数の始めに宣言する必要がありました。
これを習慣としているのか、C++ でもローカル変数・オブジェクトの宣言を関数の開始位置で行う人がいます。
//分散を求める関数 (C++スタイル宣言)
int variance(const Array<double>& ad){
assert(ad);
double dSum =0;
int i;
for (i=0; i<ad.size; ++i) dSum +=ad[i];
double dAvr =dSum/ad.size;
double dSumSq =0;
for (i=0; i<ad.size; ++i){
double dTmp =ad[i] - dAvr;
dSumSq +=dTmp*dTmp;
}
return dSumSq/ad.size;
} |
//分散を求める関数 (Cスタイル宣言)
int variance(const Array<double>& ad){
assert(ad);
double dSum =0;
double dSumSq =0;
double dAvr;
double dTmp;
int i;
for (i=0; i<ad.size; ++i) dSum +=ad[i];
dAvr =dSum/ad.size;
for (i=0; i<ad.size; ++i){
dTmp =ad[i] - dAvr;
dSumSq +=dTmp*dTmp;
}
return dSumSq/ad.size;
} |
それでも動作には何の支障もありませんが、変数の「宣言」と「実際に使われ始める位置」が離れてしまうため、プログラムがやや読みづらくなります。
また、上例のCスタイルの方では、2番目のループ内でのみ使われる変数 dTmp のスコープが関数全体に及んでしまうのも、あまり良い状況ではないでしょう。
しかし、C++ が変数・オブジェクトの宣言を関数の任意の位置で行えるようになっているのは、このような可読性に関する (些末な) 問題のためだけではありません。
これには、C にはなかった「クラス」「オブジェクト」が大きく関係しています。
