【问题标题】:What adress does "&ref_var" points to? [closed]“&ref_var”指向什么地址? [关闭]
【发布时间】:2016-08-01 15:44:42
【问题描述】:

考虑以下代码:

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

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

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

【问题讨论】:

  • 你为什么不试试呢?

标签: c++ ref


【解决方案1】:

是的,它确实指向 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-&gt;push_back(1)) 添加一个新项,然后打印 MyClass 实例的向量,并且显示我们添加的项目在myVec中。

【讨论】:

    【解决方案2】:

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

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

    vec指向什么地址?

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

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

    myClassInstance.getVector() = some_other_vector;
    

    现在myVec 将成为some_other_vector 的副本。

    【讨论】:

      【解决方案3】:

      您正在方法 getVector 中返回对 myVec 的引用。当您获取引用的地址时,您将获得引用所引用的变量的地址。所以vec 将包含myVec 的地址。

      【讨论】:

      • 我不确定这种行为。谢谢(按照tobi303的建议,我试过了,我确认你的回答)
      猜你喜欢
      • 2021-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-04
      • 2013-10-19
      • 1970-01-01
      • 2019-07-15
      相关资源
      最近更新 更多