为什么引用局部变量会在此代码中返回?

时间:2016-05-14 09:54:09

标签: c++ reference

为什么以下代码有效? 函数max返回对vector副本的引用,它是局部变量,但它返回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;
}

1 个答案:

答案 0 :(得分:2)

返回对局部变量的引用具有未定义的行为。它可能会偶然用于您的用例,但您不应该依赖它。它最终可能(并且可能会)以某种可怕的方式破裂。