【问题标题】:Did I make a dangling reference? [duplicate]我做了一个悬空的参考吗? [复制]
【发布时间】:2015-02-26 23:48:49
【问题描述】:

通常,我会省略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) 您的代码没有悬空引用。 2) 如果您确实有一个悬空引用,那么就不能修改它引用的值。
  • “通常情况下,我会省略 std::vector,但这需要我让我的函数采用 const int&。” 嗯?
  • @LightnessRacesinOrbit 如果他丢弃了std::vector&lt;int&gt; 部分,那么推导出的initializer_list&lt;int&gt; 将只允许const 访问其元素。
  • @Praetorian:哦,对了,他当时是在说词汇。

标签: c++ c++11


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-18
    • 2018-10-01
    • 1970-01-01
    相关资源
    最近更新 更多