3

写的时候

for(const auto& val: my_container)
  sum += val

Visual Studio 选择 的可变版本begin(),这是设计使然还是错误?

当我在写入容器上使用副本时,这在我的代码中是一个相当大的性能问题。

4

2 回答 2

6

这是设计使然。my_container在确定是否将其视为 const时,“foreach”循环不会查看迭代变量的限定符或引用限定符。解决方法是显式添加 const

const auto& my_container_const = my_container;
for(const auto& val: my_container_const)
   sum += val
于 2013-06-24T08:33:24.687 回答
2

这是预期的行为 aconst_iterator不是 aconst iterator并且在任何情况下begin返回 const 取决于const容器的性质而不是存储返回值的变量。

于 2013-06-24T08:32:22.607 回答