6

あなたが持っているとしましょう:

int f( const T a ) { ... }
int g( const T &a ) { ... }

constinの使用を理解しています。関数の外でgがどのように使用されているかはわかりません。aそのため、変更されないように保護したいと考えています。constただし、 inの使用方法がわかりません。 fwhereaはローカル コピーです。変更されないように保護する必要があるのはなぜですか?

4

3 に答える 3

6

いくつかの理由が考えられます:

1) 誰かがコードを読んで を見るconst T aと、関数の本体で を変更してはならないことがわかります。a

a2)関数の本体を変更しようとすると、コンパイラが通知します。したがって、追加することでconstミスを防ぐことができます。

ところで、クリスはすでにコメントでこれについて言及しています。

3)ただし、C++11 には別の違いがあります。移動操作によってオブジェクトが変更されるため、定数オブジェクトから移動することはできません。aしたがって、関数本体でのみコピーを作成でき、そこから移動することはできません。

4) また、これがクラス型の場合、const オブジェクトで非 const メンバー関数を呼び出すことはできません。

于 2013-09-14T01:03:57.460 に答える