gpt4 book ai didi

c++ - 临时打印地址?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:25:30 24 4
gpt4 key购买 nike

在下面的例子中,test.cpp:

#include <iostream>
using namespace std;

class Rectangle {
public:
int w, h;
Rectangle() : w(7), h(0) {} // constructor definition.
Rectangle(int x, int y) : w(x), h(y) {} // constructor definition.
};


class MyClass {
public:
Rectangle trec;
MyClass() {
}
Rectangle getRect() {
return trec;
}
};

int main() {
MyClass a = MyClass();
cout << &a.getRect() << endl;
}

...使用 gcc test.cpp -o test.exe 编译时出现此错误:

test.cpp: In function ‘int main()’:
test.cpp:32:22: error: taking address of temporary [-fpermissive]
cout << &a.getRect() << endl;

我真的不明白什么是临时的 - acout 运行时被实例化,所以 a.trec 应该是也实例化并有一个地址,而这正是 getRect() 返回的内容? (或者是否在 return 时隐式创建一个拷贝,因为返回类型定义为 Rectangle 而不是 Rectangle*?)

无论如何,我正在尝试检查最初这样编写的代码,其中 a.trecprivate,所以 getRect() 是我的代码中唯一可以使用的东西 - 是否有机会在这样的上下文中打印 a.trec 的地址?

最佳答案

getRect() 定义为

Rectangle getRect() {
return trec;
}

即使 trec 不是临时的 trec 实际上也不是您要返回的内容。由于您按值返回,因此您制作了 trec 的拷贝并将其放入函数 return 中。该拷贝是临时的,您无法获取它的地址。

如果您将代码更改为

Rectangle& getRect() {
return trec;
}

const Rectangle& getRect() {
return trec;
}

现在我们引用 a 的成员,我们可以获取该引用的地址。

关于c++ - 临时打印地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35347160/

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