static void MyClassMethod(
std::list<AClass> & AnObject,
const std::list<AClass>::const_iterator & BeginningPoint);
在我的代码中,我传递了const_iterator
个const
STL对象。感觉其中一个常数是多余的。
如果我只移除const
关键字,或者我只将const_iterator
更改为iterator
,它有何不同?
答案 0 :(得分:7)
A const_iterator
表示您无法修改它“指向”的对象(迭代器具有指针语义)。 const
const_iterator
表示您无法修改迭代器本身。
所以:
const std::list<AClass>::const_iterator it = smth;
it = smthElse;
是非法的,
std::list<AClass>::const_iterator it = smth;
it->nonConstMethodOfAClass();
是非法的。
答案 1 :(得分:6)
std::list<AClass>::iterator&
您可以通过迭代器更改值,并且可以更改迭代器指向函数外部的内容。
std::list<AClass>::const_iterator&
您无法通过迭代器更改值,但可以更改迭代器指向函数外部的值。
const std::list<AClass>::iterator&
您可以通过迭代器更改值,但不能更改迭代器指向函数外部的内容。
const std::list<AClass>::const_iterator&
您无法通过迭代器更改值,也无法更改迭代器指向函数外部的内容。
请注意,迭代器是通过引用传递的。如果它们是按值传递的,那么第一个const就不会那么重要了。这是因为更改迭代器的位置只会影响本地副本。