繁体   English   中英

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

[英]Why can't I use reference types as the value type of a container type?

例如, std::vector<int&> vec_int; 这似乎在c ++中无效。 为什么这个无效?

STL容器需要能够使用默认构造函数构造对象。 你不能用引用来做到这一点。 保证引用有效,因此必须始终使用赋值进行初始化。

您需要使用指针。

在内部, vector<T>使用数组来存储T对象序列。 由于引用不是对象,因此不存在引用数组(参见标准中的8.3.2§5),因此引用类型不能用于参数化vector模板。

您可能需要的是智能指针的向量,例如std::vector<boost::shared_ptr<T> >或专用指针容器,例如boost::ptr_vector<T>

根据上面的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::reference_wrapper<T>而不是实际引用。

为了相对于内存安全地存储指针,您可以类似地使用boost::shared_ptr

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM