从const向量引用元素

时间:2014-07-09 14:39:35

标签: c++ reference const

我有一个接受const std::vector<std::pair<float, cv::RotatedRect> >

的功能
void fn (const std::vector < std::pair < float, cv::RotatedRect > >& vec1,
        std::vector < std::pair< float, cv::Rect> >& vec2) {

所以,当我想采用cv::RotatedRect我做

的元素时
cv::RotatedRect& newrotrect = vec1[cntr].second;

这显然给出了错误,说我尝试从const成员创建引用。

我的问题是:

  1. 发生了什么,为什么我不允许这样做?
  2. 什么更快,从有趣的通话中删除const(这不是理想的)或const_cast元素?

2 个答案:

答案 0 :(得分:3)

  1. 你不能在没有强制转换的情况下将const引用存储在非const引用中,因为这将允许你修改对象,而const的目的是阻止你这样做。

  2. 都不是。使用

  3. const cv::RotatedRect& newrotrect = vec1[cntr].second;

答案 1 :(得分:2)

1)您不被允许,因为向量访问const的{​​{1}}版本会返回operator[]引用。这样您就无法修改其内容。它是const,所以这是有道理的。

2)您不应该决定删除const,因为它更快&#34;。您需要确定哪些语义适合您的代码。但是你可以获得const参考:

const

或制作副本:

const cv::RotatedRect& newrotrect = vec1[cntr].second;