gpt4 book ai didi

c++ - 为什么我可以返回本地 int& 并获得一定的值(value)而不是垃圾? C++

转载 作者:行者123 更新时间:2023-11-30 05:04:17 25 4
gpt4 key购买 nike

我想知道当你返回 int& 时会发生什么。让我们跳到这个例子。我有一个简单的类 Foobar 存储一个 int。让我们看一下这个函数:

Foobar showObjectsValue() {
Foobar b(50);
return b;
}

它返回一个本地对象的拷贝,所以当我调用这个函数时,我实际上得到了一些数据而不是一些垃圾。但是当我做这样的事情时:

Foobar& showObjectsValue() {
Foobar b(50);
return b;
}

它返回垃圾,因为在我们退出“showObjectsValue()”范围后,对象“b”从内存堆栈中弹出,我们返回对该弹出对象的引用(如果我错了请纠正我)。但是我不知道如果返回 int 而不是 object 会发生什么。

这个函数:

int& showIntegerValue() {
int i = 50;
return i;
}

还有这个函数:

int showIntegerValue() {
int i = 50;
return i;
}

返回相同的值,都给我 int = 50。那么有人可以解释在返回对本地整数和本地对象的引用时实际发生了什么吗?

最佳答案

So can someone explain what actually is going on in case of returning reference to local integer and local object?

整数对象。尝试访问已销毁对象的别名是未定义的行为。不要对它有任何期望。你的编译器甚至应该给你一个警告:

main.cpp:4:9: warning: reference to local variable 'i' returned [-Wreturn-local-addr]
int i = 50;

最后,当您处理未定义的行为时,仅仅因为您看到某些东西并不意味着它是预期的。为了进一步证明这一点,尝试用 GCC 运行这段代码导致上述警告和段错误。

关于c++ - 为什么我可以返回本地 int& 并获得一定的值(value)而不是垃圾? C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48966809/

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