関数の宣言とその定義が値のパラメータについて合意する必要がないと述べられているconstの正確さについては、ほとんど疑問がありません。これは、値パラメータのconstanceが関数内でのみ重要であるためです。これは問題ありません:値の精度のconst
// header
int func(int i);
// cpp
int func(const int i) {
return i;
}
本当にこれはベストプラクティスですか?誰もそれを見たことがないから。私は、これは議論されている他の場所で(ソースのわからない)この引用を見てきました:
"In fact, to the compiler, the function signature is the same whether you include this const in front of a value parameter or not."
"Avoid const pass-by-value parameters in function declarations. Still make the parameter const in the same function's definition if it won't be modified."
第二段落は宣言でのconstを入れないように言います。これは、値パラメータのconstanceがインターフェイス定義の一部として無意味であるためと考えられます。実装の詳細です。
この推奨事項に基づいて、ポインタパラメータのポインタ値にも推奨されていますか? (あなたが参照を再割り当てすることはできませんので、それは、参照パラメータの意味がありません。)
// 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を抜け出すのは極端ですか?ポインタの値をconstするのと同じくらい便利ですか?なぜ、なぜそうではないのですか?
いくつかの参照:
C++ const keyword - use liberally? Use of 'const' for function parameters
constの値のパラメータが有用でたときの例:
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
}
それは、この場合の「もし(I = J)」エラーをキャッチしますが、そのようなすべてのエラーをキャッチしていません私はその特定の根拠についてあまり興奮しません(変数で同じエラーを出すことができるので)。 constを指定しなくても、コンパイラは警告を出さなければならないと警告する必要があります。 – nobar
'if(i = j)'で興奮している点は、const値のパラメータが単なる毛羽立ちではないことを認識することです。 Michael Burrの例はこれよりも優れています。 – jmucchiello
関数のパラメータを変更していない状況では、A)安全です。B)自己文書化しています。また、プロトタイプとヘッダーにはconstとマークする必要があります。関数ヘッダーでのみ実行すると混乱します。関数内に一時変数を作成する議論は、おそらくパラメータconstを宣言する必要がない状況です。それは私の2ペニーです。 –