2015-07-12 110 views
0

我有這樣的代碼。返回值int&

#include <iostream> 
using namespace std; 

int c=0; 
int& abc() 
{ 
    c++; 
    return c; 
} 

int main() 
{ 
    cout << c << endl; 
    int f = abc(); 
    cout << c << " " << f << endl; 
    f++; 
    cout << c << " " << f << endl; 
} 

我得到的輸出是

0 
1 1 
1 2 

現在的功能ABC返回一個整數參考。因此,語句int f=abc();應將整數f和c指向相同的地址。但爲什麼f ++語句不影響c的值?

回答

1

這是因爲雖然abc()通過引用返回int,但f不會「抓取」此引用,而是抓取返回的參考指向的值。如果您想要f獲取參考,則需要將其定義爲參考類型。

做這樣的:

#include <iostream> 
using namespace std; 

int c=0; 
int& abc() 
{ 
    c++; 
    return c; 
} 

int main() 
{ 
    cout << c << endl; 
    int &f = abc(); 
    cout << c << " " << f << endl; 
    f++; 
    cout << c << " " << f << endl; 
} 
0
int f = abc(); 
^^^ // This type is 'int' not 'int&' 

你爲f類型是int這是沒有在創建副本一樣int&和結果。因此,代替f作爲對c的引用而不是c,它是一個獨立且不同的值,它初始化爲從abc返回時存儲在c中的相同值。

2
int &f = abc(); 

因爲你f不是reference.It只是被分配c值。你應該寫它看起來像上面的變量。

0

abc()返回參考。但f只是一個整數變量。因此,int f=abc()所做的是將c的值分配給f。 當您調用f ++時,它只會更改f變量值。它不會更改c的值。因爲f不是指針。

0

在以下代碼:int f = abc()˚FÇ的值的拷貝,這兩個值是不同的。當您執行++ f時,您正在增加對c不起作用的副本f。當執行以下操作:int &f = abc()要創建一個參考變量˚F這勢必的Ç,因此該值作爲˚F是變量Ç一個別名,任何更改制F是製成c