gpt4 book ai didi

c++ - 返回实例变量的地址与实例变量的返回地址

转载 作者:搜寻专家 更新时间:2023-10-31 01:30:03 25 4
gpt4 key购买 nike

如果我有任意类:

class myClass {
public:
int * getAddress() {
return &myVar;
}

int getMyVar() {
return myVar;
}
private:
int myVar;

};

假设我想将变量的地址存储在另一个类中。如果做有什么区别

int * address = myClassInstance.getAddress()

int * address = &myClassInstance.getMyVar()

我假设这两个都会给我相同的值。谁能解释一下这里到底发生了什么。

我假设现在正在发生的是我的实例变量实际上并没有被返回,而是返回了一个值的拷贝,所以当我尝试访问它的地址时,我实际上是在访问一个随机地址在函数调用范围之外将不再有效。

最佳答案

你的假设是正确的。第一个是成员(member)的有效地址。第二个是在堆栈上创建的临时值的“随机”堆栈地址。值得注意的是,如果您更改:

int getMyVar() {
return myVar;
}

int &getMyVar() {
return myVar;
}

code int * address = &myClassInstance.getMyVar() 是完全有效的并且产生与 int * address = myClassInstance.getAddress() 相同的结果。

关于c++ - 返回实例变量的地址与实例变量的返回地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48613311/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com