0

重複の可能性:
値パラメーターの定数の正確性

私は次のような良いコーディング慣行を考えています。パラメーターが値によって関数に渡される場合、パラメーターは読み取られるだけで、関数本体で変更(または再利用)されるべきではありません。しかし、それは実際には良い習慣ですか?

例(私が避けていることの例):

int foo(int x){
    //do lots of cool stuff
    x = 69;
    //do even cooler stuff
}

ここから、constの正当性に到達します。私の慣習が良ければ、すべての関数のほぼすべての引数の前に「const」を付ける必要があります。実際、「a」は楽観的です。

class A{
    const int gnoo(const int *const, const double) const;
};
4

2 に答える 2

1

問題には、宣言定義の2つの側面があります。宣言ポイントで、関数の引数の最上位の修飾子constが削除されるため、コンパイラによって削除されます。一方、定義constでは、コンパイラーは、パラメーターがそうである場合、それが内部で変更されないことを保証します。

戻り型は別の話であり、宣言constから削除されませんが、この場合、返されるオブジェクトを作成したくない可能性があります(値による場合) 。これにより、最適化の可能性が制限される可能性があります。いくつかの異なる方法でコンパイラを使用します。1つ目は、C ++ 11の新しい機能です。つまり、オブジェクトから移動できないということです。つまり、オブジェクトを返すことで、オブジェクトからの移動を禁止できます。C ++ 03では、この影響がより少なく、より多くのコーナーケースになりますが、オブジェクトを返すことの利点は限られています。constconstconstconst

constどこにでも追加することを提案する人もいます。私はそうしません、そして私が読んだほとんどのコードもそうしません。

于 2012-05-30T14:29:19.980 に答える
0

あなたの主張はよく理解されています。また、言語によっては、コンパイラー/インタープリターが最初の例のようなコードを検出すると、エラーまたは警告をスローする場合があります。

ただし、ある時点で、「開発者」を愚かなことから保護しようとするかどうかを選択するか、コードレビュー中に彼らがそうだと思い込んでこの種のことを捕まえるかどうかを選択する必要があります。

コードをより安全にするために構文メカニズムを利用することは良いことです、私見。残念ながら、開発フローを妨げる可能性があります。

于 2012-05-30T14:28:47.780 に答える