1

重複の可能性:
const(c ++)はオプションですか?
定数メンバー関数

についてさまざまな投稿を見てきましint a() constた。私の質問は、なぜconstそこにキーワードを置きたいのかということです。関数が含まれているクラスのメンバーを変更できないことはわかっていますが、どうでしょうか。

関数の上にコメントを書いて、関数内のクラス自体に変更を加えないようにコーダーに指示することもできますが、なぜ宣言const後を本当に気にするのでしょうか。たとえば、コンパイルされたコードを変更するだけでなくvoid、より良い使用方法があるのはどのシナリオですか?int a() constint a()

4

3 に答える 3

7

それは違いを生みます。メソッドAを持つクラスであると考えてください。print()次にこれ:

const A a;
a.print();

コンパイルのみがprintとして定義されconstます。

もちろん、主な理由は、クラス内のオブジェクトへの変更を防ぐことです。The

関数の上にコメントを書いて、関数内のクラス自体に変更を加えないようにコーダーに指示するだけです。

ただ希望的観測です。これは実際には起こりません。したがって、誰かがコメントを読まない(または読んで無視する)と、コンパイラエラーが発生します。

最適化の利点もあります。コンパイラーは、constオブジェクトの操作間で変更されないと想定できるため、オブジェクトのタスクをより適切に並列化できます。

于 2013-01-14T13:55:58.703 に答える
6

const関数を使用する基本的な理由は3つあります。

1)C ++では、const参照のみを一時参照にバインドできます。ただし、便利なconst関数がない場合、const参照は役に立ちません。

2)C ++標準ライブラリなどの一部のライブラリは、const関数にのみ適用される特定のセマンティック保証を提供します。たとえば、標準のコレクションでは、複数のスレッドからコレクションのconst関数に同時にアクセスできることが保証されています。

3)それはコンパイラーによって簡単に犯される間違いを捕らえることを可能にします。たとえば、C ++標準のコンテナ保証に依存する場合、constオブジェクトを使用する場合は、const関数のみを呼び出すことができます。したがって、同時実行の問題を忘れてコードを変更する誰かがコンパイル時に捕まるという間違いがあります。(誰かが実際の仕事をするためにあなたのプログラムに頼っているときではなく。)

于 2013-01-14T13:57:13.230 に答える
2

メンバー関数constを宣言する利点は、オブジェクトを変更した場合にコンパイラーがエラーを発行することです。したがって、オブジェクトを誤って変更した場合でも、コンパイラは間違いを検出します。

于 2013-01-14T13:56:34.407 に答える