在C ++ 11基于范围的'for'循环中获取对STL容器元素的引用

时间:2012-04-17 16:02:51

标签: c++ stl reference for-loop iterator

for (Something something : setOfSomething)          // OK
for (Something const& something : setOfSomething)   // OK
for (Something& something : setOfSomething)         // ERROR

error: invalid initialization of reference of type 'Something&'
from expression of type 'const Something'

从什么时候迭代器返回const Something?它应返回Something&Something const&。由于基于范围的'for'循环被解释为that,我对正在发生的事情没有合理的解释。

修改:我说的是unordered_set而不是set,对此感到抱歉。

1 个答案:

答案 0 :(得分:13)

您无法改变set的成员,因为这可能会违反set不变量。因此,编译器会限制您获取const引用或副本。