![](/img/trans.png)
[英]I can't find the utility of the second const in this part of c++ code, can someone explain please?
[英]I don't understand a part of the C++ code, can someone explain it?
我想知道是否有人可以解釋為什么 f2(a,a); 是 13 13 而不是 12 12?
這是否與 & 符號有關,如果有,它是什么意思?
提前致謝!
#include <iostream>
using namespace std;
void f1 (int a, int b){
a = 12; b = 13;
}
void f2 (int& a, int& b){
a = 12; b = 13;
}
int main()
{
int a = 10; int b = 11;
f1(a,b);
cout << a << ' ' << b << ' ';
f2(a,b);
cout << a << ' ' << b << ' ';
f2(a,a);
cout << a << ' ' << b;
}
在您調用f2(a, a)
兩個參數都指代同一個變量 ( a
)(與號表示“引用”),因此這就是您要更改的全部內容。 該函數首先為其分配 12,然后為它分配 13 - 這就是最終值。 main
函數中的變量b
不會被該函數調用更改並保留其值 (13),因此當您隨后在main
打印a
和b
時,您會得到 13 和 13。
這個功能
void f2 (int& a, int& b){
a = 12; b = 13;
}
通過引用接受其參數。 所以稱之為
f2(a,a);
這兩個參數都是對同一個對象a
引用。
起初這個對象被賦值為12
a = 12;
然后重新賦值為13
b = 13;
所以引用對象a
的結果值為13
。
為了更清楚,您可以通過以下方式想象函數調用及其定義(我將參數重命名為 a1 和 b1 以避免名稱沖突)
f2(a,a);
// ...
void f2 ( /* int& a1, int& b1 */ ){
int &a1 = a;
a1 = 12;
int &b1 = a;
b1 = 13;
}
因此,對象a
正在通過對其a1
和b1
的引用進行更改。
也就是說,您可以聲明對同一對象的多個引用,並以任何順序使用這些引用來更改引用的對象。 該對象將包含通過其中一個引用分配給它的最后一個值。
在此調用之前注意這一點
f2(a,a);
有以下電話
f2(a,b);
將變量b
的值設置為13
。
所以上面兩個調用之后的這個語句
cout << a << ' ' << b;
產出
13 13
通過將a
分配給f2(a,a);
因為這兩個參數都是作為參考參數執行的,並且您的代碼是按順序執行的。 所以a
首先被賦予值 12(分配給函數中形式參數a
的值),然后相同的變量被賦予值 13(分配給函數中形式參數b
的值)。 在函數調用f2(a,b);
之后,程序main
部分中的變量b
是 13 f2(a,b);
.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.