通常情况下,我会省略std::vector
,但这需要我将我的功能设为const int&
。我想知道的是,如果我有一个悬挂参考,那么就有一个临时矢量。修改其元素是否安全?
#include <iostream>
#include <vector>
void foo(int& i)
{
i = 42;
}
void foo(int&& i)
{
std::cout << "int&&";
}
int main()
{
for (auto&& i : std::vector<int>{1, 2, 3})
{
foo(std::forward<decltype(i)>(i));
}
}
答案 0 :(得分:2)
由于定义了ranged-for语句的方式,您的临时vector
在循环的生命周期中仍然存在。因此,这里没有悬空参考,您的程序是安全的。修改。