gpt4 book ai didi

c++ - 对 C++ 中函数返回的 vector 元素的引用

转载 作者:可可西里 更新时间:2023-11-01 18:20:33 31 4
gpt4 key购买 nike

谁能验证下是不是BUG,并说明原因?我想我知道,但不清楚细节。 (我的实际问题涉及枚举 vector ,而不是整数,但我认为这无关紧要。)假设我有以下代码:

std::vector<int> f (void) {
std::vector<int> v;
v.push_back(5);
return v;
}

void g (void) {
const int &myIntRef = f()[0];
std::cout << myIntRef << std::endl;
}

myIntRef 立即是一个悬空引用,我是否正确,因为 f 的返回值没有保存在堆栈中的任何地方?

另外,下面是一个有效的修复,还是仍然是一个错误?

  const int myIntCopy = f()[0];  // copy, not a reference

也就是说,f()的返回结果是不是还没来得及复制第0个元素就被扔掉了?

最佳答案

这是一个错误。在完整表达式的末尾 const int &myIntRef = f()[0];临时 vector 将被销毁并释放内存。任何以后使用 myIntRef是未定义的行为。

在某些情况下,将引用绑定(bind)到临时对象可以延长临时对象的生命周期。这不是其中一种情况,编译器不知道 std::vector<int>::operator[] 返回的引用是否存在是临时的一部分或对 int 的引用具有静态存储持续时间或任何其他内容,并且不会延长生命周期。

关于c++ - 对 C++ 中函数返回的 vector 元素的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15410935/

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