2016-04-11 94 views
-1

考慮下面的代碼:「&ref_var」指向哪個地址?

std::vector &MyClass::getVector() const 
{ 
    return (myVec); 
} 

void aFunc() 
{ 
    std::vector *vec = &myClassInstance.getVector(); 
} 

什麼ADRESS確實VEC點?它是否指向myClassInstance對象中myVec的地址? (順便說一句,我知道我應該返回一個const ref,但它是一個例子)。

+6

你爲什麼不試試? – user463035818

回答

3

您正在返回方法getVector中對myVec的引用。當你得到參考地址時,你會得到參考參考的變量的地址。所以vec將包含地址myVec

+0

我不確定這種行爲。謝謝(tobi303建議,我試過了,我確認你的答案) – Krapow

2

引用是另一個變量的別名。當您從getVector()返回對myVec的引用時,則可以考慮調用該函數,如果它是公開可用的,則訪問myVec就完全一樣。

&MyClass.myVec == &myClassInstance.getVector() 

什麼ADRESS確實VEC點?

myClassInstance.getVector()的地址將與myVec的地址相同。

還要注意,由於您正在返回一個左參考你甚至可以用它在賦值的左側像

myClassInstance.getVector() = some_other_vector; 

現在myVec將是some_other_vector副本。

0

是的,它確實指向MyClass實例中的矢量myVec。請參見下面的示例代碼:

#include <cstdio> 
#include <vector> 

class MyClass { 
    std::vector<int> myVec; 

public: 
    MyClass() {} 
    ~MyClass() {} 

    std::vector<int>& getVector() 
    { 
     return myVec; 
    } 

    void printVector() const 
    { 
     for(std::vector<int>::const_iterator it = myVec.begin(); it != myVec.end(); ++it) 
     { 
      printf("%d ", *it); 
     } 
     printf("\n"); 
    } 
}; 

int main(int, char**) 
{ 
    MyClass item; 

    std::vector<int>* vec = &(item.getVector()); 

    vec->push_back(1); 
    item.printVector(); 

    return 0; 
} 

運行此程序將輸出:

$ ./a.out 
1 

所以你可以看到,調用getVector()返回從MyClass的實例myVec一個參考,因爲我們添加一個新項目通過vec指針向量(vec->push_back(1))然後打印MyClass實例的向量,並且它顯示我們添加的項目存在於myVec中。

相關問題