我做了悬挂参考吗?

时间:2015-02-26 23:48:50

标签: c++ c++11

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

1 个答案:

答案 0 :(得分:2)

由于定义了ranged-for语句的方式,您的临时vector在循环的生命周期中仍然存在。因此,这里没有悬空参考,您的程序是安全的。修改。