"&ref_var"指向什么地址?
What adress does "&ref_var" points to?
考虑以下代码:
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
中。
相关文章:
- 当我们从/tp地址中添加/减去一个整数时会发生什么
- 在什么情况下,两个堆栈分配的结构对象的 this 点指向同一个地址?
- 获取通用/前向引用地址有什么意义?
- 从二进制流中读取时,将双精度变量的地址转换为 char* 意味着什么?
- C++在变量的内存地址上做什么来"deallocate"它?
- 有什么方法可以识别可用的内存地址吗?
- 在C++中为零大小的分配返回唯一地址背后的基本原理是什么?
- 将指针的地址传递给需要指针到指针的函数有什么意义?
- C++ - *(int**) 地址?这里发生了什么?
- 数组的变量名和该数组的地址有什么区别?
- 是什么原因导致指定为RtlvalidateHeap的无效地址
- 在 Xcode 中工作的 CMake 中启用地址清理器的正确方法是什么
- 不太明白 & 运算符的地址在这个结构中做什么,以及它如何能够访问其他成员变量
- 当超过可能的虚拟地址数时会发生什么情况
- 数组与其地址之间的关系是什么?
- 什么是地址0xbaddc0dedeadbead "Bad decode dead bead"
- 将绝对地址强制转换为指针变量的现代C++方法是什么?
- 跳过的内存地址是什么?
- "&ref_var"指向什么地址?
- UDP客户端多播:加入一个组,指定什么地址