STL容器需要能够使用默认构造函数构造对象.你不能用引用来做到这一点.保证引用有效,因此必须始终使用赋值进行初始化.
您需要使用指针.
按照上面的 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
Run Code Online (Sandbox Code Playgroud)
我以如何直接修改元素为例v[0]。请注意,这有点棘手(您必须调用该get()方法),因为您得到的是 aboost::reference_wrapper<T>而不是实际的引用。
为了相对于内存安全地存储指针,您可以使用boost::shared_ptr类似的方法。
| 归档时间: |
|
| 查看次数: |
1168 次 |
| 最近记录: |