为什么在这段代码中返回对局部变量的引用

why reference to a local variable returns in this code?

本文关键字:返回 局部变量 引用 代码 段代码 为什么      更新时间:2023-10-16

为什么以下代码有效?函数max返回对向量副本的引用,向量是局部变量,但它返回19(这是正确的答案)。我正在使用QtCreator 3.5.0

#include <iostream>
#include <vector>
template <class T>
T& max(std::vector<T> array)
{
   T& result = array[0];
   for (size_t i = 1; i < array.size(); i++)
   {
       if (result < array[i])
       {
           result = array[i];
       }
   }
   return result;
}
int main()
{
    std::vector<int> testVector;
    for (size_t i = 0; i < 20; i++)
    {
        testVector.push_back(i);
    }
    std::cout << max(testVector) << std::endl;
}

返回对局部变量的引用具有未定义的行为。对于你的用例来说,它可能是偶然的,但你不应该依赖它。它最终可能(也可能)以某种可怕的方式崩溃。