我是否做了一个悬置的参考

Did I make a dangling reference?

本文关键字:一个 参考 是否      更新时间:2023-10-16

通常,我会省略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));
    }
}

由于ranged for语句的定义方式,临时vector在循环的整个生命周期内都能生存。因此,这里没有悬空引用,您的程序是安全的。修改掉。