2016-04-11 93 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中。

相关问题