記事ディレクトリ
引用
- 変数のエイリアスを参照するには、次の構文を使用します。
数据类型 &别名 = 原名
注1:
- 参照を初期化する必要があります
- 参照の初期化後は変更できません
int a = 10;
int &b = a; // b和a指向同一块内存
int &b; // 错误:没有初始化
int c = 20;
b = c; // 错误:这个写法不是更改引用b,而是把c的值 赋给 b指向的内存,这时候 a和b指向的值都改了
注2:
- 値を渡すと、新しいメモリ空間が開きます (データのコピー)。形式的なパラメータの変更は実際のパラメータには影響しません
void swap(a,b) {
int temp = a; // 函数运行的时候,会单独再开辟新的 a b temp 内存空间
a = b;
b = temp;
return;
}
void main() {
int a = 10;
int b = 20;
swap(a,b);
cout << a << b << endl; // 此时a,b的值并没有发生变化,因为是值传递,形参改变不影响实参
}
- アドレスが渡された場合、仮パラメータは実パラメータを変更できます。
void swap(int* p1, int* p2) {
int temp = *p1;
*p1 = *p2;
*p2 = temp;
}
void main() {
int a = 10;
int b = 20;
swap(&a, &b); // 此时a,b的值已经被交换了。地址传递可以改变实参的值
}
参照の本質はポインタ定数です
ポインタの指す位置は変更できませんが、ポインタが指す値は変更できます。
int a = 10;
int &b = a; // 等价于: int * const b = &a
b = 20; // 等价于: *b = 20 编译器优化
アプリケーション: 誤用を防ぐための仮パラメータの変更
void func(const int& a) {
a = 100; // 错误:形参加了const之后,函数内部不可以再修改该参数的值
cout << v << endl;
}
int main() {
int a = 10;
func(a);
}
間違った使用法:
int &b = 10; // 错误:不能编译。引用必须是合法内存空间
正しい (コンパイルに合格した) 使用法:
const int &b = 10; // 可以编译。等价于:int tmep = 10; const int &b = temp;编译器优化
b = 1000; // 错误:加了const后不可以修改变量
参照による戻り値
https://blog.csdn.net/weixin_41648259/article/details/106037151