C++ 为什么在这段代码中引用局部变量会返回?

C++ 为什么在这段代码中引用局部变量会返回?,c++,reference,C++,Reference,为什么下面的代码有效? 函数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 < a

为什么下面的代码有效? 函数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;
}
#包括
#包括
模板
T&max(标准::向量数组)
{
T&result=array[0];
对于(size_t i=1;istd::cout返回对局部变量的引用有一个未定义的行为。它可能偶然适用于您的用例,但您不应该依赖它。它可能(而且可能会)最终以某种可怕的方式破门而入。

你只是幸运而已——不要依赖它如果你违反了规则,你可能会进监狱,也可能不会。只是不要这样做it@hvd是的,对不起,我想说的是它没有返回对向量副本的引用。旁白:
result=array[i];
不会执行您认为它会执行的操作。它将赋值给
数组[0]
(这在这里不会造成直接的问题,因为在
返回结果之前,没有其他内容从
数组[0]
读取;
,但是如果您修改代码以引用向量参数,则会导致问题。)@hvd我已经使用调试器发现了这个问题,但它没有解释主要问题