Quando devo usar o novo range-for e posso combiná-lo com o novo cbegin / cend?

O novo ranged-for no C ++ 11 será muito conciso e útil, é claro. Tanto quanto eu entendo como ele funciona, ele procura os "containers"begin eend tentando * Argument-Depend-Lookup "(ADT).

Mas outra adição é que todos os contêineresagora temcbegin() ecend() para obter oconst_iterators para o contêiner.

Estou um pouco confuso, por um lado, acho que devo usarcbegin() se eu fizernã deseja modificar o contêiner, por outro lado, tenho que adicionar um @ adicionconst dentro de ranged-for para obter a mesma coisa.

ntão, parece assim:

// print all
for(const auto elem : data)
  cout << elem

sando ADT, localizando data.begin (), assimconst necessário

vs

// print everything but the first (a reason not to use range-for)
for(auto it = data.cbegin()+1; it!=data.cend(); ++it)
  cout << *it

usingdata.cbegin(), portanto, nãoconst necessário

Mas isso não seria mais "idiomático"?:

// print everything but the first (a reason not to use range-for)
for(const auto it = data.begin()+1; it!=data.end(); ++it)
  cout << *it
Eu recebi o "idioma" certo? Alguma adição?Quando devo usarcbegin?Eu sinto falta de algo com range-for, procurandobegin()

Editarorreção de erValue vs Iterator

questionAnswers(2)

yourAnswerToTheQuestion