为什么以下代码有效? 函数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;
}
答案 0 :(得分:2)
返回对局部变量的引用具有未定义的行为。它可能会偶然用于您的用例,但您不应该依赖它。它最终可能(并且可能会)以某种可怕的方式破裂。