hkB*_*sai 3 c++ iterator arguments stl const
static void MyClassMethod(
std::list<AClass> & AnObject,
const std::list<AClass>::const_iterator & BeginningPoint);
Run Code Online (Sandbox Code Playgroud)
在我的代码中,我传递了const_iterator一个constSTL对象.感觉就像其中一个常数是多余的.
如果我只删除const关键字,或者我只const_iterator改为iterator?,它有什么不同?
A const_iterator意味着你无法修改它"指向"的对象(迭代器具有指针语义).A const const_iterator意味着您无法修改迭代器本身.
所以:
const std::list<AClass>::const_iterator it = smth;
it = smthElse;
Run Code Online (Sandbox Code Playgroud)
是非法的,并且
std::list<AClass>::const_iterator it = smth;
it->nonConstMethodOfAClass();
Run Code Online (Sandbox Code Playgroud)
是非法的.
std::list<AClass>::iterator&
Run Code Online (Sandbox Code Playgroud)
您可以通过迭代器更改值,并可以更改迭代器指向函数外部的内容.
std::list<AClass>::const_iterator&
Run Code Online (Sandbox Code Playgroud)
您不能通过迭代器更改值,但可以更改迭代器指向函数外部的值.
const std::list<AClass>::iterator&
Run Code Online (Sandbox Code Playgroud)
您可以通过迭代器更改值,但不能更改迭代器指向函数外部的内容.
const std::list<AClass>::const_iterator&
Run Code Online (Sandbox Code Playgroud)
您无法通过迭代器更改值,也无法更改迭代器指向函数外部的内容.
请注意,迭代器是通过引用传递的.如果它们是按值传递的,那么第一个const就不会那么重要了.这是因为更改迭代器的位置只会影响本地副本.
| 归档时间: |
|
| 查看次数: |
92 次 |
| 最近记录: |