为什么在这段代码中返回对局部变量的引用
why reference to a local variable returns in this code?
为什么以下代码有效?函数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;
}
返回对局部变量的引用具有未定义的行为。对于你的用例来说,它可能是偶然的,但你不应该依赖它。它最终可能(也可能)以某种可怕的方式崩溃。
相关文章:
- 返回对局部变量 - C++ 的引用
- libmysql:警告:返回局部变量"行"的地址(C++/C)
- 变量循环范围会导致返回局部变量的地址引用
- 通过引用返回局部变量
- C++ 返回局部变量或临时变量
- 警告:返回局部变量'buffer'地址
- 返回局部变量而不复制它们
- 警告:返回局部变量"角度"的地址 [-Wreturn-local-addr]
- 从 c++ 中的函数返回局部变量
- 返回局部变量C++的指针
- 我想返回局部变量的地址
- 通过复制返回局部变量 - 它是如何工作的
- 自动返回局部变量 x值
- 从lambda返回局部变量到const ref
- 在c++中返回局部变量(Effective c++第3版规则21)
- 转换谓词,通过引用返回局部变量
- C++中返回局部变量的引用和标准指针的替代方案是什么
- 返回局部变量
- C4172和C4239返回局部变量
- 为什么返回局部变量或临时变量的地址只是警告而不是错误?