"&ref_var"指向什么地址?

What adress does "&ref_var" points to?

本文关键字:什么 地址 var ref      更新时间:2023-10-16

考虑以下代码:

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

vec指向什么地址?它是否指向myClassInstance对象中myVec的地址?(顺便说一句,我知道我应该返回一个const-ref,但这只是一个例子)。

在方法getVector中返回对myVec的引用。当你取一个引用的地址时,你就得到了引用引用的变量的地址。所以vec将包含myVec的地址。

引用是另一个变量的别名。当您从getVector()返回对myVec的引用时,您可以考虑调用该函数,使其与访问myVec完全一样(如果它是公开的)。

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

vec指向什么地址?

myClassInstance.getVector()的地址将与myVec的地址相同。

还要注意,由于您返回的是左值引用,您甚至可以在像这样的赋值的左侧使用它

myClassInstance.getVector() = some_other_vector;

现在myVec将是some_other_vector的副本。

是的,它确实指向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中。