5
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」ループはそのよう解釈されるため、何が起こっているのかについてのもっともらしい説明はありません.

編集:unordered_setではなく、について話しているのですがset、この混乱について申し訳ありません。

4

1 に答える 1

13

不変set条件に違反する可能性があるため、 a のメンバーを変更することはできません。setそのため、コンパイラは const 参照またはコピーを元に戻すように制限します。

于 2012-04-17T16:05:08.323 に答える