2014-08-20 2 views
1

Чтобы избежать копирования объектов, это вообще лучше делатьНужно ли добавлять «const» при использовании «auto» для каждого цикла?

for(auto &x : container){...}

чем

for(auto x : container){...}

Но в обычном C++, ссылка является неконстантная, который позволил бы контейнер должен быть изменен , Должны ли мы поэтому делать это, как само собой разумеющееся, так же, как мы делаем методы const всякий раз, когда они не изменяют данные?

for(const auto &x : container){...}

+0

Да, я думаю, вы должны. –

+0

Кажется логичным, если вам нужна только информация в каждом 'x' и не собираетесь ее изменять. – Conduit

+0

Это зависит от плана ур на х, прошедшего в цикле for. –

ответ

4

Это зависит от того, что вы хотите сделать в теле for заявления.

  • Если вы хотите доступ только для чтения к элементам, которые вы повторяете, используйте auto const&.
  • Если вы хотите изменить элементы, используйте auto&&. Я предпочитаю это auto&, потому что он обрабатывает случаи, когда разыменование итератора контейнера создает rvalue (vector<bool>).

Там также proposal чтобы

for(x : container) { ... } 

который был бы менее многословным форма

for(auto&& x : container) { ... } 
+0

Почему не 'auto &&' для краткости? – Deduplicator

+0

@Deduplicator Почему бы не всегда сокращать 'const' для краткости? – Praetorian

+0

Так в чем же разница между 'const auto &' и 'auto const &'? –

Смежные вопросы