Я немного перепутался с const_iterators. Например, давайте рассмотрим функцию:Почему компилятор позволяет отправлять ссылку на итератор в функции, которая принимает ссылку на const iterator?
void functionForConstIterator(std::list<int> const& list, std::list<int>::const_iterator& const_iter)
{
const_iter = list.begin();
}
Теперь можно написать:
void main()
{
std::list<int> myList = {1, 2, 3, 4, 5};
std::list<int> const& listRef = myList;
std::list<int>::iterator iter;
functionForConstIterator(listRef, iter);
*iter = 7;
for (auto it = myList.begin(); it != myList.end(); ++it)
std::cout << *it << " ";
}
Выход {7, 2, 3, 4, 5}. Зачем? Если я получаю ссылку на константу в контейнере, я не должен ее менять. Это компилятор Visual Studio 2015.
Если параметр функции является константной ссылки, что просто означает, что функция не может изменить его. Это не заставит его начинать быть const вне функции. – JETM
[Ваш код фиктивный] (http://coliru.stacked-crooked.com/a/1bc62e737a7e80f4) –
Но это означает, что если у меня есть ссылка только const, а не сам контейнер, я всегда могу ее изменить. –