簡體   English   中英

我不明白 C++ 代碼的一部分,有人可以解釋一下嗎?

[英]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打印ab時,您會得到 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正在通過對其a1b1的引用進行更改。

也就是說,您可以聲明對同一對象的多個引用,並以任何順序使用這些引用來更改引用的對象。 該對象將包含通過其中一個引用分配給它的最后一個值。

在此調用之前注意這一點

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM