3
static void MyClassMethod(
          std::list<AClass>                 & AnObject,
    const std::list<AClass>::const_iterator & BeginningPoint);

在我的代码中,我传递了const_iterator一个constSTL 对象。感觉其中一个常数是多余的。

如果我只删除const关键字,或者只更改const_iterator为,它有什么不同iterator

4

2 回答 2

7

Aconst_iterator意味着您不能修改它“指向”的对象(迭代器具有指针语义)。Aconst const_iterator表示您不能修改迭代器本身。

所以:

 const std::list<AClass>::const_iterator it = smth;
 it = smthElse;

是非法的,并且

 std::list<AClass>::const_iterator it = smth;
 it->nonConstMethodOfAClass();

是非法的。

于 2013-08-07T15:49:20.297 回答
6
std::list<AClass>::iterator&

您可以通过迭代器更改值,并且可以更改迭代器指向函数外部的内容。

std::list<AClass>::const_iterator&

您不能通过迭代器更改值,但您可以更改迭代器指向函数外部的内容。

const std::list<AClass>::iterator&

您可以通过迭代器更改值,但不能更改迭代器指向函数外部的内容。

const std::list<AClass>::const_iterator&

您无法通过迭代器更改值,也无法更改迭代器指向函数外部的内容。

请注意,迭代器是通过引用传递的。如果它们是按值传递的,那么第一个 const 就没有那么重要了。这是因为更改迭代器的位置只会影响您的本地副本。

于 2013-08-07T15:49:36.037 回答