3

書くとき

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

Visual Studio は の変更可能なバージョンを選択しbegin()ます。これは設計によるものですか、それともバグですか?

私はコピー オン ライト コンテナーを使用しているため、これは私のコードではかなりのパフォーマンスの問題です。

4

2 に答える 2

6

これは仕様によるものです。my_container「foreach」ループは、const として扱うかどうかを決定するときに、反復変数の修飾子または参照修飾子を調べません。回避策は const を明示的に追加することです

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

これは予想される動作でconst_iteratorありconst iterator、いずれの場合も、戻り値を格納する変数ではなく、コンテナの性質にbegin応じて const を返します。const

于 2013-06-24T08:32:22.607 に答える