あなたが持っているとしましょう:
int f( const T a ) { ... }
int g( const T &a ) { ... }
const
inの使用を理解しています。関数の外でg
がどのように使用されているかはわかりません。a
そのため、変更されないように保護したいと考えています。const
ただし、 inの使用方法がわかりません。 f
wherea
はローカル コピーです。変更されないように保護する必要があるのはなぜですか?
あなたが持っているとしましょう:
int f( const T a ) { ... }
int g( const T &a ) { ... }
const
inの使用を理解しています。関数の外でg
がどのように使用されているかはわかりません。a
そのため、変更されないように保護したいと考えています。const
ただし、 inの使用方法がわかりません。 f
wherea
はローカル コピーです。変更されないように保護する必要があるのはなぜですか?
いくつかの理由が考えられます:
1) 誰かがコードを読んで を見るconst T a
と、関数の本体で を変更してはならないことがわかります。a
a
2)関数の本体を変更しようとすると、コンパイラが通知します。したがって、追加することでconst
ミスを防ぐことができます。
ところで、クリスはすでにコメントでこれについて言及しています。
3)ただし、C++11 には別の違いがあります。移動操作によってオブジェクトが変更されるため、定数オブジェクトから移動することはできません。a
したがって、関数本体でのみコピーを作成でき、そこから移動することはできません。
4) また、これがクラス型の場合、const オブジェクトで非 const メンバー関数を呼び出すことはできません。