代码之家  ›  专栏  ›  技术社区  ›  Thomson

为什么我不能使用引用类型作为容器类型的值类型?

  •  7
  • Thomson  · 技术社区  · 14 年前

    std::vector<int&> vec_int; 这在c++中似乎无效。为什么这是无效的?

    3 回复  |  直到 14 年前
        1
  •  3
  •   Diego Sevilla    14 年前

    根据上面的chryspi请求回答。正如在其他响应中所评论的,不能直接使用引用,因为引用本身不存在。

    但是,您可以使用引用,但是通过使用 boost::reference_wrapper<T>

        typedef boost::reference_wrapper<int> intref;
        std::vector<intref> v;
        int i;
        i = 9;
    
        v.push_back (boost::ref (i));  // store &i
    
        int& j = v[0];
        j = 10;
        //v[0].get() = 10;
    
        std::cout << i << std::endl; // prints 10
    

    我以如何直接修改元素为例 v[0] get() 方法)因为你得到了 boost::引用包装器<T> 而不是实际的参考。

    boost::shared_ptr 同样地。

        2
  •  9
  •   ypnos    14 年前

    STL容器需要能够使用默认构造函数构造对象。你不能用参考资料来做。引用被保证是有效的,因此它总是必须用赋值初始化。

        3
  •  3
  •   fredoverflow    14 年前

    在内部,a vector<T> 使用数组存储 T vector 模板。

    你可能想要的是一个智能指针向量,比如 std::vector<boost::shared_ptr<T> > 或专用指针容器,如 boost::ptr_vector<T> .