関数の宣言とその定義が値パラメーターについて合意する必要がないと述べられている場合、定数の正当性についての質問はほとんどないことを私は知っています。これは、値パラメーターの定数が関数内でのみ重要であるためです。これは問題ありません:
// header
int func(int i);
// cpp
int func(const int i) {
return i;
}
これを行うことは本当にベストプラクティスですか?私は誰もそれをするのを見たことがないからです。私はこれが議論された他の場所でこの引用(出典がわからない)を見ました:
「実際、コンパイラーにとって、値パラメーターの前にこのconstを含めるかどうかに関係なく、関数のシグニチャーは同じです。」
「関数宣言でconstの値渡しパラメーターを使用しないでください。変更しない場合は、同じ関数の定義でパラメーターconstを作成してください。」
2番目の段落は、宣言にconstを含めないことを示しています。これは、値パラメーターの定数がインターフェース定義の一部として無意味であるためだと思います。実装の詳細です。
この推奨事項に基づいて、ポインターパラメーターのポインター値にも推奨されますか?(参照を再割り当てできないため、参照パラメーターでは意味がありません。)
// header
int func1(int* i);
int func2(int* i);
// cpp
int func1(int* i) {
int x = 0;
*i = 3; // compiles without error
i = &x; // compiles without error
return *i;
}
int func2(int* const i) {
int x = 0;
*i = 3; // compiles without error
i = &x; // compile error
return *i;
}
要約:値パラメーターの作成は、いくつかの論理エラーをキャッチするのに役立ちます。それはベストプラクティスですか?constをヘッダーファイルから除外するという極端なことをしますか?ポインタ値を設定することも同様に役立ちますか?なぜまたはなぜそうではないのですか?
いくつかの参考文献:
C ++ constキーワード-自由に使用しますか? 関数パラメーターに「const」を使用する
constvalueパラメーターが役立つ場合の例:
bool are_ints_equal(const int i, const int j) {
if (i = j) { // without the consts this would compile without error
return true;
} else {
return false;
}
// return i = j; // I know it can be shortened
}