2010-12-14 29 views
0

それは意味がありますか?C++:関数の引数でできるだけ定数を使うべきでしょうか?

ありがとうございました。

編集:私は関数の引数でしばしば定数charを見てきました...その理由はありますか?

編集2:編集しないでください。 「In silicoの答え」を参照してください。

編集3:これはエチケットの質問であり、「何が起こるか」という質問ではありません。私はconstのことを理解しています。

+0

必要な引数を使用してください:) –

+0

ギザモが必要な結果を生成するタスクレットを実行するウィジェットを使用します。 – cdhowie

+0

関数宣言で 'const'を使用することを意味しますか? –

答えて

0

参照(&)を扱っていて、引数を変更しない場合はいつでもconstを使用してください。これは、それらを入力引数として明確に識別するためです。パフォーマンスも良くなるはずです。そして何千もの理由があります。価値によって引き渡される議論ではおそらく役に立たないが、どちらも傷つけることはない。

void Foo(const char* str); 

これはconst charへのポインタを受け取りfooという関数を宣言します。

+0

ありがとうございます。 –

4

は、この関数の宣言を考えてみましょう。この文脈におけるconstは、strによって指し示されたものの内容を変更しないことを約束することを意味する。

これはconst-correctnessと関係がある言語の基本的な部分です。あなたが何か比較的簡単なものを求めなければならないという事実は、あなたがpick up a good C++ bookに行き、それを通して読むべきであることを意味します。あなたはそれを使う方法と、なぜそれを気にするのかをもっとよく理解するでしょう。

また、const-correctness herehereも読んでください。繰り返しますが、これは言語の基本的な部分です。適切なC++でコーディングしたい場合は、それを正しく取得することが重要です。

0

constは、問題のものを変更しないと約束します。パラメータを変更しないことを約束し、ポインタが指すもの(または参照が参照するもの)を変更するのではなく、thisオブジェクト(メンバー関数内)などを変更することはできません。戻り値の場合、 「約束」は発信者を拘束しているので、実際には発信者が返されたものを変更することはできません。

これは、値渡しではコピーを作成するので、ポインタと参照(特にC++では、ポインタで渡すことを好まないから、値を渡さない方が望ましいので参照)で便利です。呼び出された関数が独自の値のコピーを変更するかどうかは、呼び出し側は気にしません。しかし、参照渡しの場合、constは関数が参照によって値を変更しないことを知らせます。

同様に、私たちは参照によって何かを返すとき、一般に既存のものを参照しています - おそらく最も一般的には、メンバー関数から参照によってデータメンバーを返します。この場合、constは、呼び出し元がこの参照を使用してオブジェクトを変更するのを防ぎます。これにより、コードが何をするのかを簡単に判断でき、間違いから守ることができます。アクセサー関数をペアで参照するのは一般的です.1つの非constバージョンと、戻り値とthisオブジェクトの両方がconstである1つのconstバージョンです。 (このオブジェクトは、をエンドの後にパラメータリストの最後の括弧に入れて作成します。)意味: "呼び出し元が返された参照によってオブジェクトを変更しない限り、この関数を呼び出すことはオブジェクトに影響しません"。呼び出し元がクラスのconstインスタンスを持つ場合、const参照のみが返されます。

詳細については、http://www.parashift.com/c++-faq-lite/const-correctness.htmlをご覧ください。

+0

ありがとう、しかし、私は "const"が大部分をしていることを知っています。私の質問は、コードエチケットのことでした。 –

関連する問題