【问题标题】:Return value of non-initialized reference_wrapper未初始化reference_wrapper的返回值
【发布时间】:2014-06-05 20:58:32
【问题描述】:

当我resize()下面的向量时,reference_wrapper指向哪里?这是未定义的行为吗?为了安全,我应该怎么做?

std::vector < std::reference_wrapper <int> > vec;
vec.resize(10);

【问题讨论】:

  • 您似乎无法调整vec 的大小。您只能push_back 向其中添加更多项目。

标签: c++ c++11 vector reference-wrapper


【解决方案1】:

您的代码无法编译,因为reference_wrapper 没有默认构造函数。

error: no matching function for call to ‘std::reference_wrapper<int>::reference_wrapper()’

【讨论】:

    【解决方案2】:

    vector&lt;T&gt;::resize(size_type) 要求 T 是默认可构造的,而 reference_wrapper 不是,因此您的代码不会按原样编译。

    但大概是,当vector 根据需要重新分配存储空间时,reference_wrapper 对象会发生什么情况。没什么特别的,他们会继续引用他们最初引用的对象。

    Live demo

    【讨论】:

      猜你喜欢
      • 2017-03-13
      • 2017-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-02
      相关资源
      最近更新 更多