【发布时间】:2016-11-26 06:29:35
【问题描述】:
我对 const_iterators 有点搞砸了。例如,让我们考虑一下函数:
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}。为什么?如果我在容器上获得 const 引用,我不必更改它。这是 Visual Studio 2015 编译器。
【问题讨论】:
-
如果一个函数参数是一个常量引用,那只是意味着函数不能改变它。它不会使它在函数之外开始成为 const。
-
但这意味着如果我只有 const 引用,而不是容器本身,我总是可以改变它。
-
@πάνταῥεῖ 他指出他正在使用 VS2015 编译器,这意味着您的链接无效,因为它表明 GCC 正确地将其检测为有问题。我怀疑这个问题需要一个 VS2015 标签。
标签: c++ visual-studio-2015 const-iterator