(const)
今のところ無視し、int
明確にするために使用します。
値渡しは、関数の本体にコピーを作成します
void funcA(int arg) {
// arg here is a copy
// anything I do to arg has no effect on caller side.
arg++; // only has effect locally
}
セマンティックにコピーを作成しますが、コンパイラは特定の条件下でコピーを削除できることに注意してください。コピーの省略を検索する
参照で渡します。呼び出し元から渡された引数を変更できます。
void funcA(int& arg) {
// arg here is a reference
// anything I do to arg is seen on caller side.
arg++;
}
ポインタを値で渡します。ポインタのコピーを取得しましたが、呼び出し元の引数が指す同じオブジェクトを指しています
void funcA(int* arg) {
// changes to arg do not affect caller's argument
// BUT I can change the object pointed to
(*arg)++; // pointer unchanged, pointee changed. Caller sees it.
}
ポインタへの参照を渡します。先のとがったもの自体を変更することができ、発信者に変更が表示されます。
void funcA(int*& arg) {
// changes to arg affect caller's argument
// AND I can change the object pointed to.
(*arg)++; // pointee changed
arg++; // pointer changed. Caller sees it.
}
ご覧のとおり、次の2つは、ポインターを処理することを除いて、最初の2つとまったく同じです。ポインタの機能を理解していれば、概念的には違いはありません。
に関してconst
は、引数を変更できるかどうか、または引数が参照またはポインタの場合は、それらが指す/参照するものを変更できるかどうかを指定します。ここでは、の配置const
が重要です。たとえば、constの正当性を参照してください。